home *** CD-ROM | disk | FTP | other *** search
/ Aminet 23 / Aminet 23 (1998)(GTI - Schatztruhe)[!][Feb 1998].iso / Aminet / dev / src / CdBS_KQSrc0_3.lha / KaliosysQuantrum / Gui.s < prev    next >
Text File  |  1997-11-05  |  73KB  |  3,363 lines

  1. *
  2. * CdBSian Obviously Universal & Interactive Nonsense (COUIN)
  3. * (Absurdité CdBSienne Manifestement Universelle et Interactive)
  4. * ©1997, CdBS Software (MORB)
  5. * Gui routines
  6. * $Id: Gui.s 0.58 1997/11/05 18:48:03 MORB Exp MORB $
  7. *
  8.  
  9. ;fs "_InitGui"
  10. _GuiBpMem:
  11.          ds.l      1
  12. _GuiSelMem:
  13.          ds.l      1
  14. _GuiBitmap:
  15.          ds.l      1
  16. _GuiSelBitmap:
  17.          ds.l      1
  18. _InitGui:
  19.          lea       _GuiBpPtrs,a0
  20.          move.l    _GuiBitmap(pc),d0
  21.          move.w    #bplpt,d1
  22.          moveq     #NbGuiPlanes-1,d2
  23. .Loop:
  24.          swap      d0
  25.          move.w    d1,(a0)+
  26.          move.w    d0,(a0)+
  27.          addq.w    #2,d1
  28.          move.w    d1,(a0)+
  29.          swap      d0
  30.          move.w    d0,(a0)+
  31.          addq.w    #2,d1
  32.          add.l     #GuiBufferWidth,d0
  33.          dbf       d2,.Loop
  34.  
  35.          lea       _GuiSelBpPtrs,a0
  36.          move.l    _GuiSelBitmap(pc),d0
  37.          move.l    d0,$8f00000
  38.          move.w    #bplpt,d1
  39.          moveq     #NbPlanes-1,d2
  40. .Loop2:
  41.          swap      d0
  42.          move.w    d1,(a0)+
  43.          move.w    d0,(a0)+
  44.          addq.w    #2,d1
  45.          move.w    d1,(a0)+
  46.          swap      d0
  47.          move.w    d0,(a0)+
  48.          addq.w    #2,d1
  49.          add.l     #GuiSelBufferWidth,d0
  50.          dbf       d2,.Loop2
  51.          rts
  52. ;fe
  53. ;fs "Gui copper table"
  54. CopLayer4:
  55.          dc.l      0,0
  56. GuiP:
  57.          dc.w      $29+240,CET_BREAK
  58.          dc.l      _GuiCList
  59.          dc.l      _GuiCopTable
  60.  
  61. _GuiCopTable:
  62.          dc.l      GuiNml
  63. _GuiL1Ptr:
  64.          dc.l      CopEnd,-1
  65.  
  66. GuiLayer1:
  67.          dc.l      0,0
  68. GuiSelP:
  69.          dc.w      $29+240,CET_BREAK
  70.          dc.l      _GuiSelCList
  71.          dc.l      _GuiSelCopTable
  72.  
  73. _GuiSelCopTable:
  74.          dc.l      GuiSelNml
  75.          dc.l      CopEnd,-1
  76.  
  77. CopEnd:
  78.          dc.l      0,0
  79.          dc.w      $29+256,CET_BREAK
  80.          dc.l      0,0
  81. ;fe
  82.  
  83. ;fs "_Request"
  84. _ReqHook:
  85.          ds.l      1
  86. _ReqLastGui:
  87.          ds.l      1
  88.  
  89. _Request:          ; a0=Title a1=body a2=buttons a3=Hook a4=datastream
  90.          move.l    a3,_ReqHook
  91.          move.l    _CurrentGui,_ReqLastGui
  92.  
  93.          move.l    a0,ReqTitle+ge_Data
  94.          move.l    a1,ReqBody+ge_Data
  95.          move.l    a4,ReqBody+ge_Data2
  96.  
  97.          lea       _GuiTemp,a0
  98.          lea       ReqButtons(pc),a1
  99.          moveq     #1,d1
  100.          lea       _Button(pc),a3
  101.  
  102. .BLoop:
  103.          move.l    a3,(a1)
  104.          move.l    a0,ge_Data(a1)
  105.  
  106. .CLoop:
  107.          move.b    (a2)+,d0
  108.          beq.s     .CDone
  109.          cmp.b     #"|",d0
  110.          beq.s     .CDone
  111.          move.b    d0,(a0)+
  112.          bra.s     .CLoop
  113.  
  114. .CDone:
  115.          clr.b     (a0)+
  116.          move.l    d1,ge_ID(a1)
  117.  
  118.          tst.b     d0
  119.          beq.s     .BDone
  120.  
  121.          addq.l    #1,d1
  122.          lea       ge_Size(a1),a1
  123.          bra.s     .BLoop
  124.  
  125. .BDone:
  126.          move.l    a0,_CtGuiTemp
  127.  
  128.          clr.l     ge_ID(a1)
  129.          clr.l     ge_Size(a1)
  130.          clr.l     ge_Size*2(a1)
  131.  
  132.          lea       ReqGui(pc),a0
  133.          bra.s     _ChangeGui
  134.  
  135. _ReqButHook:
  136.          move.l    ge_ID(a0),d0
  137.  
  138.          move.l    _ReqLastGui,a0
  139.          bsr.s     _ChangeGui
  140.  
  141.          move.l    _ReqHook,d1
  142.          beq.s     .Done
  143.          move.l    d1,-(a7)
  144. .Done:
  145.          rts
  146.  
  147. ReqGui:
  148.          GENTRY    _VGroup,0,0
  149.  
  150.          GENTRY    _HGroup,0,0
  151.          GENTRY    _SmallButton,"X",_ReqButHook
  152.          GENTRY    _SmallButton,"I",_Iconify
  153.  
  154. ReqTitle:
  155.          GENTRY    _DragBar,0,0
  156.          GEND
  157.  
  158. ReqBody:
  159.          GENTRY    _Text,0,0
  160.  
  161.          GENTRY    _HGroup,0,0
  162.  
  163. ReqButtons:
  164.          rept      20
  165.          GENTRY    0,0,_ReqButHook
  166.          endr
  167.  
  168.          GEND
  169. ;fe
  170.  
  171. ;fs "_HandleMouse"
  172. _MouseHook:
  173.          dc.l      0
  174. _HandleMouse:
  175.          move.l    Low_Base,a6
  176.          moveq     #0,d0
  177.          CALL      ReadJoyPort
  178.  
  179.          move.l    _MouseX(pc),d6
  180.          move.l    _MouseY(pc),d7
  181.  
  182.          move.l    d0,d1
  183.          and.l     #JP_MHORZ_MASK,d1
  184.  
  185.          lea       LastHMCount(pc),a0
  186.          move.w    (a0),d2
  187.          move.w    d1,(a0)
  188.          sub.b     d2,d1
  189.  
  190.          extb.l    d1
  191.          add.l     d1,d6
  192.  
  193.          and.l     #JP_MVERT_MASK,d0
  194.          lsr.l     #8,d0
  195.  
  196.          lea       LastVMCount(pc),a0
  197.          move.w    (a0),d2
  198.          move.w    d0,(a0)
  199.          sub.b     d2,d0
  200.  
  201.          extb.l    d0
  202.          asr.l     #1,d0
  203.          add.l     d0,d7
  204.  
  205.          movem.l   _MinMouseX(pc),d0-3
  206.  
  207.          cmp.l     d0,d6
  208.          bge.s     .XPos
  209.          move.l    d0,d6
  210. .XPos:
  211.  
  212.          cmp.l     d2,d6
  213.          ble.s     .XOk
  214.          move.l    d2,d6
  215. .XOk:
  216.          move.l    d6,_MouseX
  217.  
  218.          cmp.l     d1,d7
  219.          bge.s     .YPos
  220.          move.l    d1,d7
  221. .YPos:
  222.  
  223.          cmp.l     d3,d7
  224.          ble.s     .YOk
  225.          move.l    d3,d7
  226. .YOk:
  227.          move.l    d7,_MouseY
  228.  
  229.          subq.w    #HotPointX,d6
  230.          lsl.w     #1,d6
  231.          subq.w    #HotPointY,d7
  232.  
  233.          lea       MouseGDwarf(pc),a0
  234.          movem.w   d6-7,gdw_X(a0)
  235.          bsr       _RefreshGardenDwarf
  236.  
  237.          move.l    _MouseHook(pc),d0
  238.          beq.s     .Done
  239.          move.l    d0,a0
  240.          jmp       (a0)
  241. .Done:
  242.  
  243.          rts
  244. _MinMouseX:
  245.          dc.l      0
  246. _MinMouseY:
  247.          dc.l      0
  248. _MaxMouseX:
  249.          dc.l      GuiScreenWidth
  250. _MaxMouseY:
  251.          dc.l      256
  252. _MouseX:
  253.          dc.l      GuiScreenWidth
  254. _MouseY:
  255.          dc.l      256
  256. LastHMCount:
  257.          ds.w      1
  258. LastVMCount:
  259.          ds.w      1
  260. MouseGDwarf:
  261.          dc.l      _MouseGardenDwarfDat,0
  262.          dc.w      0,0,14
  263. ;fe
  264. ;fs "_HandleGui"
  265. _PlayfieldClickHandler:
  266.          ds.l      1
  267. _PreHandler:
  268.          ds.l      1
  269. _ActiveThingHandler:
  270.          ds.l      1
  271. _ActiveGuiEntry:
  272.          ds.l      1
  273. _OldMButtonState:
  274.          ds.b      1
  275.          even
  276.  
  277. _HandleGui:
  278.          move.l    _PreHandler(pc),d0
  279.          beq.s     .Kzlonka
  280.  
  281.          move.l    d0,a0
  282.          jsr       (a0)
  283.  
  284. .Kzlonka:
  285.          movem.l   _MouseX(pc),d0-1
  286.          sub.l     _GuiPos,d1
  287.  
  288.          move.l    _ActiveThingHandler(pc),d2
  289.          beq.s     .AhBon
  290.          move.l    d2,a1
  291.          move.l    _ActiveGuiEntry(pc),a0
  292.          lea       ge_Domain(a0),a2
  293.          move.l    a2,_CurrentDomain
  294.          jmp       (a1)
  295.  
  296. .AhBon:
  297.          move.b    _OldMButtonState(pc),d2
  298.          btst      #0,$dff016
  299.          seq       _OldMButtonState
  300.          bne.s     .PasClickuMilieu
  301.  
  302.          tst.b     d2
  303.          bne.s     .PasClickuMilieu
  304.  
  305.          cmp.l     #CopEnd,_GuiLayerPtr
  306.          beq       .ShowGui
  307.  
  308.          move.l    #CopEnd,_GuiLayerPtr
  309.          bra.s     .PasClickuMilieu
  310.  
  311. .ShowGui:
  312.          move.l    #CopLayer4,_GuiLayerPtr
  313.  
  314. .PasClickuMilieu:
  315.  
  316.          move.l    _PlayfieldClickHandler(pc),d2
  317.          beq.s     .Décidement
  318.  
  319.          cmp.l     #CopEnd,_GuiLayerPtr
  320.          beq       .GzlonK
  321.  
  322.          tst.l     d1
  323.          bpl.s     .Décidement
  324.  
  325. .GzlonK:
  326.  
  327.          movem.l   _MouseX(pc),d0-1
  328.          move.l    d2,a0
  329.          jmp       (a0)
  330.  
  331. .Décidement:
  332.          cmp.l     #CopEnd,_GuiLayerPtr
  333.          beq.s     .OhEtPuisMerdeTousVouf
  334.  
  335.          btst      #6,$bfe001
  336.          bne.s     .OhEtPuisMerdeTousVouf
  337.  
  338.          move.l    _CurrentGui(pc),d2
  339.          beq.s     .OhEtPuisMerdeTousVouf
  340.          move.l    d2,a0
  341.  
  342.          cmp2.l    ge_Domain+gd_Left(a0),d0
  343.          bcs.s     .OhEtPuisMerdeTousVouf
  344.  
  345.          cmp2.l    ge_Domain+gd_Top(a0),d1
  346.          bcs.s     .OhEtPuisMerdeTousVouf
  347.  
  348.          bsr.s     _DoClick
  349.  
  350. .OhEtPuisMerdeTousVouf:
  351.          rts
  352. ;fe
  353.  
  354. ;fs "_RefreshGuiEntry"
  355. _RefreshGuiEntry:  ; a0=GuiEntry
  356.          movem.l   d3-7/a1,-(a7)
  357.  
  358.          move.l    _CurrentDomain,-(a7)
  359.  
  360.          lea       ge_Domain(a0),a1
  361.          move.l    a1,_CurrentDomain
  362.  
  363.          bsr       _ClearDomain
  364.          bsr       _Layout
  365.          bsr       _Render
  366.  
  367.          move.l    (a7)+,_CurrentDomain
  368.  
  369.          movem.l   (a7)+,d3-7/a1
  370.          rts
  371. ;fe
  372. ;fs "_ChangeGui"
  373. _CurrentGui:
  374.          ds.l      1
  375. _ChangeGui:        ; a0=GuiTable
  376.          movem.l   d0-7/a0-6,-(a7)
  377.          bsr.s     _ClearGui
  378.  
  379.          move.l    #_GuiTemp,_CtGuiTemp
  380.          move.l    #CopEnd,_GuiL1Ptr
  381.  
  382.          move.l    a0,_CurrentGui
  383.  
  384.          bsr.s     _GetMinMax
  385.  
  386.          moveq     #0,d0
  387.          move.l    #255,d1
  388.  
  389.          move.l    ge_MaxHeight(a0),d2
  390.          beq.s     .NoMax
  391.          move.l    d1,d0
  392.          sub.l     ge_MaxHeight(a0),d0
  393. .NoMax:
  394.          move.l    d0,_MinGuiPos
  395.  
  396.          sub.l     ge_MinHeight(a0),d1
  397.          move.l    d1,_MaxGuiPos
  398.  
  399.          move.l    _GuiPos(pc),d2
  400.  
  401.          cmp.l     d0,d2
  402.          bcc.s     .MinOk
  403.          move.l    d0,d2
  404. .MinOk:
  405.  
  406.          cmp.l     d2,d1
  407.          bcc.s     .MaxOk
  408.          move.l    d1,d2
  409. .MaxOk:
  410.          move.l    d2,_GuiPos
  411.  
  412.          bsr.s     _MoveGui
  413.          bsr.s     _Layout
  414.          bsr.s     _Render
  415.          movem.l   (a7)+,d0-7/a0-6
  416.          rts
  417. ;fe
  418. ;fs "_MoveGui"
  419. _GuiPos:
  420.          dc.l      256
  421. _MinGuiPos:
  422.          dc.l      0
  423. _MaxGuiPos:
  424.          dc.l      256
  425. _MoveGui:
  426.          move.l    _GuiPos(pc),d0
  427.          move.l    d0,d1
  428.  
  429.          add.l     #$28,d0
  430.          move.w    d0,GuiP
  431.  
  432.          move.l    _CurrentGui(pc),a0
  433.  
  434.          move.l    #2,ge_Domain+gd_Left(a0)
  435.          move.l    #0,ge_Domain+gd_Top(a0)
  436.  
  437.          move.l    #GuiScreenWidth-2,ge_Domain+gd_Right(a0)
  438.          move.l    #GuiScreenWidth-4,ge_Domain+gd_Width(a0)
  439.  
  440.          move.l    #255,d0
  441.          sub.l     d1,d0
  442.          move.l    d0,ge_Domain+gd_Height(a0)
  443.          move.l    d0,ge_Domain+gd_Bottom(a0)
  444.          rts
  445. ;fe
  446. ;fs "_ClearGui"
  447. _ClearGui:
  448.          move.l    a0,-(a7)
  449.          move.l    _CurrentGui(pc),d0
  450.          beq.s     .Done
  451.          move.l    d0,a0
  452.  
  453.          lea       ge_Domain(a0),a0
  454.          move.l    a0,_CurrentDomain
  455.          bsr       _ClearDomain
  456.  
  457. .Done:
  458.          move.l    (a7)+,a0
  459.          rts
  460. ;fe
  461. ;fs "_GetMinMax"
  462. _GetMinMax:        ; a0=GuiEntry
  463.          movem.l   d0-7/a0-6,-(a7)
  464.          move.l    (a0),a1
  465.          move.l    (a1),a1
  466.          jsr       (a1)
  467.          movem.l   (a7)+,d0-7/a0-6
  468.          rts
  469. ;fe
  470. ;fs "_Layout"
  471. _Layout: ; a0=GuiEntry
  472.          movem.l   d0-7/a0-6,-(a7)
  473.          move.l    (a0),a1
  474.          move.l    gc_Layout(a1),d0
  475.          beq.s     .Done
  476.          move.l    d0,a3
  477.  
  478.          lea       _CurrentDomain(pc),a1
  479.          move.l    (a1),-(a7)
  480.          lea       ge_Domain(a0),a2
  481.          move.l    a2,(a1)
  482.  
  483.          jsr       (a3)
  484.  
  485.          lea       _CurrentDomain(pc),a1
  486.          move.l    (a7)+,(a1)
  487.  
  488. .Done:
  489.          movem.l   (a7)+,d0-7/a0-6
  490.          rts
  491. ;fe
  492. ;fs "_Render"
  493. _Render: ; a0=GuiEntry
  494.          movem.l   d0-7/a0-6,-(a7)
  495.          move.l    (a0),a1
  496.          move.l    gc_Render(a1),d0
  497.          beq.s     .Done
  498.          move.l    d0,a3
  499.  
  500.          lea       _CurrentDomain(pc),a1
  501.          move.l    (a1),-(a7)
  502.          lea       ge_Domain(a0),a2
  503.          move.l    a2,(a1)
  504.  
  505.          jsr       (a3)
  506.  
  507.          lea       _CurrentDomain(pc),a1
  508.          move.l    (a7)+,(a1)
  509.  
  510. .Done:
  511.          movem.l   (a7)+,d0-7/a0-6
  512.          rts
  513. ;fe
  514. ;fs "_DoClick"
  515. _DoClick: ; a0=GuiEntry d0/d1=X,Y
  516.          movem.l   d0-1/d3-7/a0-6,-(a7)
  517.          move.l    (a0),a1
  518.          move.l    gc_Click(a1),d2
  519.          ble.s     .Done
  520.          move.l    d2,a3
  521.  
  522.          lea       _CurrentDomain(pc),a1
  523.          move.l    (a1),-(a7)
  524.          lea       ge_Domain(a0),a2
  525.          move.l    a2,(a1)
  526.  
  527.          jsr       (a3)
  528.  
  529.          lea       _CurrentDomain(pc),a1
  530.          move.l    (a7)+,(a1)
  531.          moveq     #0,d2
  532.  
  533. .Done:
  534.          movem.l   (a7)+,d0-1/d3-7/a0-6
  535.          rts
  536. ;fe
  537.  
  538. ;fs "Classes"
  539. ;fs "_HGroup"
  540. _HGroup:
  541.          dc.l      HGGetMinMax
  542.          dc.l      HGLayout
  543.          dc.l      _GRender
  544.          dc.l      _GClick
  545.  
  546. HGGetMinMax:
  547.          move.l    a0,a1
  548.          lea       ge_Size(a0),a0
  549.          moveq     #0,d0
  550.          moveq     #0,d1
  551.          moveq     #0,d2
  552.          moveq     #0,d3
  553.          ;bset      #31,d3
  554.          not.l     d3
  555.          sf        d5
  556.  
  557. .Loop:
  558.          bsr.s     _GetMinMax
  559.  
  560.          add.l     ge_MinWidth(a0),d0
  561.          move.l    ge_MaxWidth(a0),d4
  562.          seq       d6
  563.          or.b      d6,d5
  564.          add.l     d4,d2
  565.  
  566.          move.l    ge_MinHeight(a0),d4
  567.          cmp.l     d4,d1
  568.          bcc.s     .MiHOk
  569.          move.l    d4,d1
  570. .MiHOk:
  571.  
  572.          move.l    ge_MaxHeight(a0),d4
  573.          beq.s     .MaHOk
  574.          cmp.l     d3,d4
  575.          bcc.s     .MaHOk
  576.          move.l    d4,d3
  577. .MaHOk:
  578.  
  579.          move.l    ge_Next(a0),a0
  580.          tst.l     (a0)
  581.          beq.s     .Done
  582.  
  583.          addq.l    #GuiHorSpacing,d0
  584.          addq.l    #GuiHorSpacing,d2
  585.  
  586.          bra.s     .Loop
  587.  
  588. .Done:
  589.          tst.b     d5
  590.          beq.s     .WMaxOk
  591.          moveq     #0,d2
  592. .WMaxOk:
  593.  
  594.          tst.l     d3
  595.          bpl.s     .HMaxOk
  596.          moveq     #0,d3
  597. .HMaxOk:
  598.  
  599.          lea       ge_Size(a0),a0
  600.          move.l    a0,ge_Next(a1)
  601.          movem.l   d0-3,ge_MinWidth(a1)
  602.          rts
  603.  
  604. HGLayout:
  605.          move.l    a0,a6
  606.          lea       ge_Size(a0),a0
  607.          move.l    a0,a5
  608.          moveq     #0,d7
  609.  
  610.          move.l    _CurrentDomain(pc),a1
  611.          move.l    gd_Height(a1),d0
  612.          move.l    gd_Top(a1),d1
  613.          move.l    gd_Bottom(a1),d2
  614.  
  615. .InitLoop:
  616.          tst.l     (a0)
  617.          beq.s     .ILOk
  618.          move.l    d1,ge_Domain+gd_Top(a0)
  619.          move.l    d2,ge_Domain+gd_Bottom(a0)
  620.          clr.l     ge_Domain+gd_Width(a0)
  621.          move.l    d0,ge_Domain+gd_Height(a0)
  622.          addq.l    #1,d7
  623.  
  624.          move.l    ge_Next(a0),a0
  625.          bra.s     .InitLoop
  626.  
  627. .ILOk:
  628.          move.l    gd_Width(a1),d5
  629.  
  630.          move.l    d7,d0
  631.          subq.l    #1,d0
  632.          add.l     d0,d0
  633.          sub.l     d0,d5
  634.  
  635. .BigLoop:
  636.          tst.l     d7
  637.          beq.s     .MoreOrLessBigLoop
  638.  
  639.          move.l    d5,d4
  640.          divu      d7,d4
  641.          ext.l     d4
  642.  
  643. .MoreOrLessBigLoop:
  644.          move.l    a5,a0
  645.  
  646. .Loop:
  647.          tst.l     ge_Domain+gd_Width(a0)
  648.          bne.s     .Fixed
  649.  
  650.          move.l    ge_MinWidth(a0),d0
  651.          cmp.l     d0,d4
  652.          bcc.s     .MinOk
  653.          move.l    d0,ge_Domain+gd_Width(a0)
  654.          sub.l     d0,d5
  655.          subq.l    #1,d7
  656.          moveq     #0,d1
  657.          move.l    d1,ge_Domain+gd_Left(a0)
  658.          bra.s     .BigLoop
  659. .MinOk:
  660.  
  661.          move.l    ge_MaxWidth(a0),d0
  662.          beq.s     .Next
  663.  
  664.          cmp.l     d4,d0
  665.          bcc.s     .Next
  666.          move.l    d0,ge_Domain+gd_Width(a0)
  667.          sub.l     d0,d5
  668.          subq.l    #1,d7
  669.          moveq     #1,d1
  670.          move.l    d1,ge_Domain+gd_Left(a0)
  671.          bra.s     .BigLoop
  672.  
  673. .Fixed:
  674.          move.l    ge_Domain+gd_Left(a0),d0
  675.          eor.l     d1,d0
  676.          beq.s     .Next
  677.  
  678.          move.l    ge_Domain+gd_Width(a0),d0
  679.          add.l     d5,d0
  680.          move.l    d7,d2
  681.          addq.l    #1,d2
  682.          divu      d2,d0
  683.          ext.l     d0
  684.  
  685.          move.l    ge_MinWidth(a0),d2
  686.          cmp.l     d2,d0
  687.          bcs.s     .Next
  688.  
  689.          move.l    ge_MaxWidth(a0),d2
  690.          beq.s     .AhhRâaah
  691.          cmp.l     d0,d2
  692.          bcs.s     .Next
  693.  
  694. .AhhRâaah:
  695.          add.l     ge_Domain+gd_Width(a0),d5
  696.          clr.l     ge_Domain+gd_Width(a0)
  697.          addq.l    #1,d7
  698.          move.l    d0,d4
  699.          bra.s     .MoreOrLessBigLoop
  700.  
  701. .Next:
  702.          move.l    ge_Next(a0),a0
  703.          tst.l     (a0)
  704.          bne.s     .Loop
  705.  
  706. .Ok:
  707.  
  708.          move.l    a5,a0
  709.          move.l    gd_Left(a1),d0
  710.  
  711. .PosLoop:
  712.          move.l    d0,ge_Domain+gd_Left(a0)
  713.  
  714.          move.l    ge_Domain+gd_Width(a0),d1
  715.          bne.s     .PLWOk
  716.          move.l    d4,d1
  717.          move.l    d4,ge_Domain+gd_Width(a0)
  718. .PLWOk:
  719.  
  720.          add.l     d1,d0
  721.          move.l    d0,ge_Domain+gd_Right(a0)
  722.          addq.l    #GuiHorSpacing,d0
  723.  
  724.          bsr       _Layout
  725.  
  726.          move.l    ge_Next(a0),a0
  727.          tst.l     (a0)
  728.          bne.s     .PosLoop
  729.  
  730.          rts
  731. ;fe
  732. ;fs "_VGroup"
  733. _VGroup:
  734.          dc.l      VGGetMinMax
  735.          dc.l      VGLayout
  736.          dc.l      _GRender
  737.          dc.l      _GClick
  738.  
  739. VGGetMinMax:
  740.          move.l    a0,a1
  741.          lea       ge_Size(a0),a0
  742.          moveq     #0,d0
  743.          moveq     #0,d1
  744.          moveq     #0,d2
  745.          ;bset      #31,d2
  746.          not.l     d2
  747.          moveq     #0,d3
  748.          sf        d5
  749.  
  750. .Loop:
  751.          bsr.s     _GetMinMax
  752.  
  753.          add.l     ge_MinHeight(a0),d1
  754.          move.l    ge_MaxHeight(a0),d4
  755.          seq       d6
  756.          or.b      d6,d5
  757.          add.l     d4,d3
  758.  
  759.          move.l    ge_MinWidth(a0),d4
  760.          cmp.l     d4,d0
  761.          bcc.s     .MiWOk
  762.          move.l    d4,d0
  763. .MiWOk:
  764.  
  765.          move.l    ge_MaxWidth(a0),d4
  766.          beq.s     .MaWOk
  767.          cmp.l     d2,d4
  768.          bcc.s     .MaWOk
  769.          move.l    d4,d2
  770. .MaWOk:
  771.  
  772.          move.l    ge_Next(a0),a0
  773.          tst.l     (a0)
  774.          beq.s     .Done
  775.  
  776.          addq.l    #GuiVerSpacing,d1
  777.          addq.l    #GuiVerSpacing,d3
  778.  
  779.          bra.s     .Loop
  780.  
  781. .Done:
  782.          tst.b     d5
  783.          beq.s     .HMaxOk
  784.          moveq     #0,d3
  785. .HMaxOk:
  786.  
  787.          tst.l     d2
  788.          bpl.s     .WMaxOk
  789.          moveq     #0,d2
  790. .WMaxOk:
  791.  
  792.          lea       ge_Size(a0),a0
  793.          move.l    a0,ge_Next(a1)
  794.          movem.l   d0-3,ge_MinWidth(a1)
  795.          rts
  796.  
  797. VGLayout:
  798.          move.l    a0,a6
  799.          lea       ge_Size(a0),a0
  800.          move.l    a0,a5
  801.          moveq     #0,d7
  802.  
  803.          move.l    _CurrentDomain(pc),a1
  804.          move.l    gd_Width(a1),d0
  805.          move.l    gd_Left(a1),d1
  806.          move.l    gd_Right(a1),d2
  807.  
  808. .InitLoop:
  809.          tst.l     (a0)
  810.          beq.s     .ILOk
  811.          move.l    d1,ge_Domain+gd_Left(a0)
  812.          move.l    d2,ge_Domain+gd_Right(a0)
  813.          move.l    d0,ge_Domain+gd_Width(a0)
  814.          clr.l     ge_Domain+gd_Height(a0)
  815.          addq.l    #1,d7
  816.  
  817.          move.l    ge_Next(a0),a0
  818.          bra.s     .InitLoop
  819.  
  820. .ILOk:
  821.          move.l    gd_Height(a1),d5
  822.  
  823.          move.l    d7,d0
  824.          subq.l    #1,d0
  825.          sub.l     d0,d5
  826.  
  827. .BigLoop:
  828.          tst.l     d7
  829.          beq.s     .MoreOrLessBigLoop
  830.  
  831.          move.l    d5,d4
  832.          divu      d7,d4
  833.          ext.l     d4
  834.  
  835. .MoreOrLessBigLoop:
  836.          move.l    a5,a0
  837.  
  838. .Loop:
  839.          tst.l     ge_Domain+gd_Height(a0)
  840.          bne.s     .Fixed
  841.  
  842.          move.l    ge_MinHeight(a0),d0
  843.          cmp.l     d0,d4
  844.          bcc.s     .MinOk
  845.          move.l    d0,ge_Domain+gd_Height(a0)
  846.          sub.l     d0,d5
  847.          subq.l    #1,d7
  848.          moveq     #0,d1
  849.          move.l    d1,ge_Domain+gd_Top(a0)
  850.          bra.s     .BigLoop
  851. .MinOk:
  852.  
  853.          move.l    ge_MaxHeight(a0),d0
  854.          beq.s     .Next
  855.  
  856.          cmp.l     d4,d0
  857.          bcc.s     .Next
  858.          move.l    d0,ge_Domain+gd_Height(a0)
  859.          sub.l     d0,d5
  860.          subq.l    #1,d7
  861.          moveq     #1,d1
  862.          move.l    d1,ge_Domain+gd_Top(a0)
  863.          bra.s     .BigLoop
  864.  
  865. .Fixed:
  866.          move.l    ge_Domain+gd_Top(a0),d0
  867.          eor.l     d1,d0
  868.          beq.s     .Next
  869.  
  870.          move.l    ge_Domain+gd_Height(a0),d0
  871.          add.l     d5,d0
  872.          move.l    d7,d2
  873.          addq.l    #1,d2
  874.          divu      d2,d0
  875.          ext.l     d0
  876.  
  877.          move.l    ge_MinHeight(a0),d2
  878.          cmp.l     d2,d0
  879.          bcs.s     .Next
  880.  
  881.          move.l    ge_MaxHeight(a0),d2
  882.          beq.s     .AhhRâaah
  883.          cmp.l     d0,d2
  884.          bcs.s     .Next
  885.  
  886. .AhhRâaah:
  887.          add.l     ge_Domain+gd_Height(a0),d5
  888.          clr.l     ge_Domain+gd_Height(a0)
  889.          addq.l    #1,d7
  890.          move.l    d0,d4
  891.          bra.s     .MoreOrLessBigLoop
  892.  
  893. .Next:
  894.          move.l    ge_Next(a0),a0
  895.          tst.l     (a0)
  896.          bne.s     .Loop
  897.  
  898. .Ok:
  899.  
  900.          move.l    a5,a0
  901.          move.l    gd_Top(a1),d0
  902.  
  903. .PosLoop:
  904.          move.l    d0,ge_Domain+gd_Top(a0)
  905.  
  906.          move.l    ge_Domain+gd_Height(a0),d1
  907.          bne.s     .PLHOk
  908.          move.l    d4,d1
  909.          move.l    d4,ge_Domain+gd_Height(a0)
  910. .PLHOk:
  911.  
  912.          add.l     d1,d0
  913.          move.l    d0,ge_Domain+gd_Bottom(a0)
  914.          addq.l    #GuiVerSpacing,d0
  915.  
  916.          bsr       _Layout
  917.  
  918.          move.l    ge_Next(a0),a0
  919.          tst.l     (a0)
  920.          bne.s     .PosLoop
  921.  
  922.          rts
  923. ;fe
  924. ;fs "_GRender"
  925. _GRender:
  926.          lea       ge_Size(a0),a0
  927.  
  928. .Loop:
  929.          bsr       _Render
  930.  
  931.          move.l    ge_Next(a0),a0
  932.          tst.l     (a0)
  933.          bne.s     .Loop
  934.  
  935.          rts
  936. ;fe
  937. ;fs "_GClick"
  938. _GClick:
  939.          lea       ge_Size(a0),a0
  940.  
  941. .Loop:
  942.          cmp2.l    ge_Domain+gd_Left(a0),d0
  943.          bcs.s     .NoClick
  944.  
  945.          cmp2.l    ge_Domain+gd_Top(a0),d1
  946.          bcc.s     .Bingo
  947.  
  948. .NoClick:
  949.          move.l    ge_Next(a0),a0
  950.          tst.l     (a0)
  951.          bne.s     .Loop
  952.          rts
  953.  
  954. .Bingo:
  955.          bsr.s     _DoClick
  956.          tst.l     d2
  957.          bmi.s     .NoClick
  958.          rts
  959. ;fe
  960. ;fs "_Button"
  961. _Button:
  962.          dc.l      BGetMinMax
  963.          dc.l      0
  964.          dc.l      BRender
  965.          dc.l      BClick
  966.  
  967. BGetMinMax:
  968.          move.l    ge_Data(a0),a1
  969.          move.l    a1,a2
  970. .StrLen:
  971.          tst.b     (a1)+
  972.          bne.s     .StrLen
  973.          sub.l     a2,a1
  974.          move.l    a1,d0
  975.  
  976.          clr.l     ge_MaxWidth(a0)
  977.          lsl.l     #3,d0
  978.          move.l    d0,ge_MinWidth(a0)
  979.  
  980.          subq.l    #8,d0
  981.          move.l    d0,ge_Temp(a0)
  982.  
  983.          moveq     #12,d0
  984.          move.l    d0,ge_MinHeight(a0)
  985.          move.l    d0,ge_MaxHeight(a0)
  986.  
  987.          lea       ge_Size(a0),a1
  988.          move.l    a1,ge_Next(a0)
  989.          rts
  990.  
  991. BRender:
  992.          move.l    _CurrentDomain(pc),a1
  993.          moveq     #0,d0
  994.          moveq     #0,d1
  995.          move.l    gd_Width(a1),d2
  996.          move.l    gd_Height(a1),d3
  997.          sf        d4
  998.          bsr       _DrawBevelBox
  999.  
  1000.          sub.l     ge_Temp(a0),d2
  1001.          lsr.l     #1,d2
  1002.          move.l    d2,d6
  1003.          moveq     #2,d7
  1004.          move.l    ge_Data(a0),a5
  1005.          moveq     #1,d4
  1006.          moveq     #0,d5
  1007.          bsr       _DrawText
  1008.          rts
  1009.  
  1010. BClick:
  1011.          move.l    a0,_ActiveGuiEntry
  1012.          lea       BHandler(pc),a1
  1013.          move.l    a1,_ActiveThingHandler
  1014.  
  1015.          sf        BPressed
  1016.  
  1017. BHandler:
  1018.          btst      #6,$bfe001
  1019.          bne.s     .Desactivate
  1020.  
  1021.          move.b    BPressed(pc),d2
  1022.  
  1023.          cmp2.l    ge_Domain+gd_Left(a0),d0
  1024.          scc       d0
  1025.  
  1026.          cmp2.l    ge_Domain+gd_Top(a0),d1
  1027.          scc       d1
  1028.  
  1029.          and.b     d1,d0
  1030.          move.b    d0,BPressed
  1031.  
  1032.          eor.b     d0,d2
  1033.          beq.s     .Done
  1034.  
  1035.          tst.b     d0
  1036.          bne.s     .Press
  1037.  
  1038. .Release:
  1039.          move.l    _CurrentDomain(pc),a1
  1040.          moveq     #0,d3
  1041.          moveq     #2,d4
  1042.          moveq     #1,d5
  1043.          movem.l   gd_Width(a1),d6-7
  1044.          subq.l    #4,d6
  1045.          subq.l    #2,d7
  1046.          bsr       _DrawRectangle
  1047.  
  1048.          bra       BRender
  1049.  
  1050. .Press:
  1051.          move.l    _CurrentDomain(pc),a1
  1052.          moveq     #3,d3
  1053.          moveq     #2,d4
  1054.          moveq     #1,d5
  1055.          movem.l   gd_Width(a1),d6-7
  1056.          subq.l    #4,d6
  1057.          subq.l    #2,d7
  1058.          bsr       _DrawRectangle
  1059.  
  1060.          move.l    _CurrentDomain(pc),a1
  1061.          moveq     #0,d0
  1062.          moveq     #0,d1
  1063.          move.l    gd_Width(a1),d2
  1064.          move.l    gd_Height(a1),d3
  1065.          st        d4
  1066.          bsr       _DrawBevelBox
  1067.  
  1068.          sub.l     ge_Temp(a0),d2
  1069.          lsr.l     #1,d2
  1070.          move.l    d2,d6
  1071.          moveq     #2,d7
  1072.          move.l    ge_Data(a0),a5
  1073.          moveq     #1,d4
  1074.          moveq     #0,d5
  1075.          bsr       _DrawText
  1076.          rts
  1077.  
  1078. .Desactivate:
  1079.          clr.l     _ActiveThingHandler
  1080.  
  1081.          tst.b     BPressed
  1082.          beq.s     .Done
  1083.  
  1084.          bsr.s     .Release
  1085.          move.l    ge_Hook(a0),d0
  1086.          beq.s     .Done
  1087.          move.l    d0,a1
  1088.          jmp       (a1)
  1089.  
  1090. .Done:
  1091.          rts
  1092.  
  1093. BPressed:
  1094.          ds.b      1
  1095.          even
  1096. ;fe
  1097. ;fs "_SmallButton"
  1098. _SmallButton:
  1099.          dc.l      SBGetMinMax
  1100.          dc.l      SBLayout
  1101.          dc.l      SBRender
  1102.          dc.l      SBClick
  1103.  
  1104. SBGetMinMax:
  1105.          moveq     #16,d0
  1106.          move.l    d0,ge_MinWidth(a0)
  1107.  
  1108.          tst.l     ge_Data3(a0)
  1109.          beq.s     .Ok
  1110.          moveq     #0,d0
  1111. .Ok:
  1112.  
  1113.          move.l    d0,ge_MaxWidth(a0)
  1114.  
  1115.          moveq     #12,d0
  1116.          move.l    d0,ge_MinHeight(a0)
  1117.          move.l    d0,ge_MaxHeight(a0)
  1118.  
  1119.          lea       ge_Size(a0),a1
  1120.          move.l    a1,ge_Next(a0)
  1121.          rts
  1122.  
  1123. SBLayout:
  1124.          move.l    ge_Domain+gd_Width(a0),d0
  1125.          subq.l    #8,d0
  1126.          lsr.l     #1,d0
  1127.          move.l    d0,ge_Temp(a0)
  1128.          rts
  1129.  
  1130. SBRender:
  1131.          move.l    _CurrentDomain(pc),a1
  1132.          moveq     #0,d0
  1133.          moveq     #0,d1
  1134.          move.l    gd_Width(a1),d2
  1135.          move.l    gd_Height(a1),d3
  1136.          sf        d4
  1137.          bsr       _DrawBevelBox
  1138.  
  1139.          move.l    ge_Temp(a0),d6
  1140.          moveq     #2,d7
  1141.          move.l    ge_Data(a0),d5
  1142.          moveq     #1,d4
  1143.          bsr       _DrawChar
  1144.          rts
  1145.  
  1146. SBClick:
  1147.          move.l    a0,_ActiveGuiEntry
  1148.          lea       SBHandler(pc),a1
  1149.          move.l    a1,_ActiveThingHandler
  1150.  
  1151.          sf        SBPressed
  1152.  
  1153. SBHandler:
  1154.          btst      #6,$bfe001
  1155.          bne.s     .Desactivate
  1156.  
  1157.          move.b    SBPressed(pc),d2
  1158.          beq.s     .Glonk
  1159.          move.l    ge_Data2(a0),d3
  1160.          beq.s     .Glonk
  1161.          move.l    d3,a1
  1162.          movem.l   d0-2/a0,-(a7)
  1163.          jsr       (a1)
  1164.          movem.l   (a7)+,d0-2/a0
  1165. .Glonk:
  1166.  
  1167.          cmp2.l    ge_Domain+gd_Left(a0),d0
  1168.          scc       d0
  1169.  
  1170.          cmp2.l    ge_Domain+gd_Top(a0),d1
  1171.          scc       d1
  1172.  
  1173.          and.b     d1,d0
  1174.          move.b    d0,SBPressed
  1175.  
  1176.          eor.b     d0,d2
  1177.          beq.s     .Done
  1178.  
  1179.          tst.b     d0
  1180.          bne.s     .Press
  1181.  
  1182. .Release:
  1183.          move.l    _CurrentDomain(pc),a1
  1184.          moveq     #0,d3
  1185.          moveq     #2,d4
  1186.          moveq     #1,d5
  1187.          movem.l   gd_Width(a1),d6-7
  1188.          subq.l    #4,d6
  1189.          subq.l    #2,d7
  1190.          bsr       _DrawRectangle
  1191.  
  1192.          bra       SBRender
  1193.  
  1194. .Press:
  1195.          move.l    _CurrentDomain(pc),a1
  1196.          moveq     #3,d3
  1197.          moveq     #2,d4
  1198.          moveq     #1,d5
  1199.          movem.l   gd_Width(a1),d6-7
  1200.          subq.l    #4,d6
  1201.          subq.l    #2,d7
  1202.          bsr       _DrawRectangle
  1203.  
  1204.          move.l    _CurrentDomain(pc),a1
  1205.          moveq     #0,d0
  1206.          moveq     #0,d1
  1207.          move.l    gd_Width(a1),d2
  1208.          move.l    gd_Height(a1),d3
  1209.          st        d4
  1210.          bsr       _DrawBevelBox
  1211.  
  1212.          move.l    ge_Temp(a0),d6
  1213.          moveq     #2,d7
  1214.          move.l    ge_Data(a0),d5
  1215.          moveq     #1,d4
  1216.          bsr       _DrawChar
  1217.          rts
  1218.  
  1219. .Desactivate:
  1220.          clr.l     _ActiveThingHandler
  1221.  
  1222.          tst.b     SBPressed
  1223.          beq.s     .Done
  1224.  
  1225.          bsr.s     .Release
  1226.          move.l    ge_Hook(a0),d0
  1227.          beq.s     .Done
  1228.          move.l    d0,a1
  1229.          jmp       (a1)
  1230.  
  1231. .Done:
  1232.          rts
  1233.  
  1234. SBPressed:
  1235.          ds.b      1
  1236.          even
  1237. ;fe
  1238. ;fs "_DragBar"
  1239. _DragBar:
  1240.          dc.l      BGetMinMax
  1241.          dc.l      0
  1242.          dc.l      BRender
  1243.          dc.l      DBClick
  1244.  
  1245. DBClick:
  1246.          move.l    d0,_MinMouseX
  1247.          move.l    d0,_MaxMouseX
  1248.  
  1249.          move.l    a0,_ActiveGuiEntry
  1250.          lea       DBHandler(pc),a1
  1251.          move.l    a1,_ActiveThingHandler
  1252.  
  1253.          move.l    d1,DBOffset
  1254.          move.w    GuiSelP,d0
  1255.          sub.w     GuiP,d0
  1256.          move.w    d0,DBSelOffset
  1257.  
  1258.          move.l    d1,d0
  1259.          add.l     _MinGuiPos(pc),d0
  1260.          move.l    d0,_MinMouseY
  1261.  
  1262.          add.l     _MaxGuiPos(pc),d1
  1263.          move.l    d1,_MaxMouseY
  1264.  
  1265.          lea       DBMouseHook(pc),a0
  1266.          move.l    a0,_MouseHook
  1267.  
  1268.          ;move.l    #CopEnd,_GuiL1Ptr
  1269.          rts
  1270.  
  1271. DBHandler:
  1272.          btst      #6,$bfe001
  1273.          beq.s     .Ok
  1274.  
  1275.          clr.l     _MouseHook
  1276.          clr.l     _ActiveThingHandler
  1277.  
  1278.          clr.l     _MinMouseX
  1279.          clr.l     _MinMouseY
  1280.  
  1281.          move.l    #GuiScreenWidth,_MaxMouseX
  1282.          move.l    #256,_MaxMouseY
  1283.  
  1284.          bsr       _ClearGui
  1285.          bsr       _MoveGui
  1286.          move.l    _CurrentGui(pc),a0
  1287.          bsr       _Layout
  1288.          bsr       _Render
  1289.  
  1290. .Ok:
  1291.          rts
  1292.  
  1293. DBMouseHook:
  1294.          move.l    _MouseY(pc),d0
  1295.          sub.l     DBOffset(pc),d0
  1296.          move.l    d0,_GuiPos
  1297.  
  1298.          add.l     #$28,d0
  1299.          move.w    d0,GuiP
  1300.  
  1301.          add.w     DBSelOffset,d0
  1302.          move.w    d0,GuiSelP
  1303.          rts
  1304.  
  1305. DBOffset:
  1306.          ds.l      1
  1307. DBSelOffset:
  1308.          ds.w      1
  1309. ;fe
  1310. ;fs "_Text"
  1311. _Text:
  1312.          dc.l      TGetMinMax
  1313.          dc.l      0
  1314.          dc.l      TRender
  1315.          dc.l      0
  1316.  
  1317. TGetMinMax:
  1318.          move.l    ge_Data(a0),a1
  1319.          move.l    ge_Data2(a0),d0
  1320.          beq.s     .TrucEtTout
  1321.  
  1322.          move.l    a0,-(a7)
  1323.          move.l    (AbsExecBase).w,a6
  1324.          move.l    a1,a0
  1325.          move.l    d0,a1
  1326.          lea       TPutChar(pc),a2
  1327.          lea       _StrBuf,a3
  1328.          CALL      RawDoFmt
  1329.          move.l    (a7)+,a0
  1330.          lea       _StrBuf,a1
  1331.          lea       CustomBase,a6
  1332.  
  1333.          moveq     #0,d0
  1334.  
  1335. .TrucEtTout:
  1336.          moveq     #0,d1
  1337.  
  1338. .LLoop:
  1339.          addq.l    #1,d0
  1340.          move.l    a1,a2
  1341.  
  1342. .CLoop:
  1343.          move.b    (a2)+,d2
  1344.          beq.s     .CLDone
  1345.          cmp.b     #$a,d2
  1346.          bne.s     .CLoop
  1347. .CLDone:
  1348.  
  1349.          move.l    a2,d3
  1350.          sub.l     a1,d3
  1351.  
  1352.          cmp.l     d3,d1
  1353.          bcc.s     .Baâââh
  1354.          move.l    d3,d1
  1355. .Baâââh:
  1356.  
  1357.          move.l    a2,a1
  1358.          tst.b     d2
  1359.          bne.s     .LLoop
  1360.  
  1361.          lsl.l     #3,d0
  1362.          move.l    d0,ge_MinHeight(a0)
  1363.          move.l    d0,ge_MaxHeight(a0)
  1364.  
  1365.          subq.l    #1,d1
  1366.          lsl.l     #3,d1
  1367.  
  1368.          clr.l     ge_MaxWidth(a0)
  1369.          move.l    d1,ge_MinWidth(a0)
  1370.  
  1371.          lea       ge_Size(a0),a1
  1372.          move.l    a1,ge_Next(a0)
  1373.          rts
  1374.  
  1375. TRender:
  1376.          move.l    _CurrentDomain(pc),a1
  1377.          move.l    gd_Width(a1),d1
  1378.          move.l    ge_Data(a0),a5
  1379.          moveq     #0,d7
  1380.          move.l    ge_Data2(a0),d0
  1381.          beq.s     .LLoop
  1382.  
  1383.          movem.l   d1/a1,-(a7)
  1384.          move.l    (AbsExecBase).w,a6
  1385.          move.l    a5,a0
  1386.          move.l    d0,a1
  1387.          lea       TPutChar(pc),a2
  1388.          lea       _StrBuf,a3
  1389.          CALL      RawDoFmt
  1390.          lea       _StrBuf,a5
  1391.          lea       CustomBase,a6
  1392.          movem.l   (a7)+,d1/a1
  1393.  
  1394. .LLoop:
  1395.          move.l    a5,a1
  1396.  
  1397. .CLoop:
  1398.          move.b    (a1)+,d2
  1399.          beq.s     .CLDone
  1400.          cmp.b     #$a,d2
  1401.          bne.s     .CLoop
  1402. .CLDone:
  1403.          move.l    a1,d5
  1404.          sub.l     a5,d5
  1405.          subq.l    #1,d5
  1406.          beq.s     .Poisse
  1407.  
  1408.          move.l    d5,d0
  1409.          lsl.l     #3,d0
  1410.          move.l    d1,d6
  1411.          sub.l     d0,d6
  1412.          lsr.l     #1,d6
  1413.  
  1414.          moveq     #1,d4
  1415.          bsr       _DrawText
  1416.  
  1417. .Poisse:
  1418.          move.l    a1,a5
  1419.          addq.l    #8,d7
  1420.  
  1421.          tst.b     d2
  1422.          bne.s     .LLoop
  1423.  
  1424.          rts
  1425.  
  1426. TPutChar:
  1427.          move.b    d0,(a3)+
  1428.          rts
  1429. ;fe
  1430. ;fs "_FText"
  1431. _FText:
  1432.          dc.l      FTGetMinMax
  1433.          dc.l      0
  1434.          dc.l      TRender
  1435.          dc.l      0
  1436.  
  1437. FTGetMinMax:
  1438.          bsr.s     TGetMinMax
  1439.          move.l    ge_MinWidth(a0),ge_MaxWidth(a0)
  1440.          rts
  1441. ;fe
  1442. ;fs "_HProp"
  1443. _HProp:
  1444.          dc.l      HPGetMinMax
  1445.          dc.l      HPLayout
  1446.          dc.l      HPRender
  1447.          dc.l      HPClick
  1448.  
  1449. HPGetMinMax:
  1450.          moveq     #50,d0
  1451.          move.l    d0,ge_MinWidth(a0)
  1452.          moveq     #0,d0
  1453.          move.l    d0,ge_MaxWidth(a0)
  1454.  
  1455.          moveq     #12,d0
  1456.          move.l    d0,ge_MinHeight(a0)
  1457.          move.l    d0,ge_MaxHeight(a0)
  1458.  
  1459.          lea       ge_Size(a0),a1
  1460.          move.l    a1,ge_Next(a0)
  1461.          rts
  1462.  
  1463. HPLayout:
  1464.          move.l    ge_Domain+gd_Width(a0),d0
  1465.          sub.l     #8,d0
  1466.          move.l    d0,d1
  1467.          move.l    ge_Data2(a0),d2
  1468.  
  1469.          move.l    ge_Data3(a0),d3
  1470.          cmp.l     d2,d3
  1471.          bcc.s     .FullKnob
  1472.  
  1473.          mulu      d3,d1
  1474.          divu      d2,d1
  1475.          ext.l     d1
  1476.  
  1477.          cmp.l     #14,d1
  1478.          bcc.s     .FullKnob
  1479.          moveq     #14,d1
  1480.  
  1481. .FullKnob:
  1482.          move.l    d1,ge_Temp3(a0)
  1483.  
  1484.          sub.l     d1,d0
  1485.          move.l    d0,ge_Temp(a0)
  1486.  
  1487. HPCalcKnobPos:
  1488.          movem.l   ge_Data2(a0),d1-2
  1489.          move.l    ge_Data(a0),d0
  1490.          bpl.s     .MinOk
  1491.          moveq     #0,d0
  1492. .MinOk:
  1493.  
  1494.          move.l    d1,d3
  1495.          sub.l     d2,d3
  1496.          bpl.s     .Ok
  1497.          moveq     #0,d3
  1498. .Ok:
  1499.  
  1500.          cmp.l     d0,d3
  1501.          bcc.s     .MaxOk
  1502.          move.l    d3,d0
  1503. .MaxOk:
  1504.  
  1505.          move.l    d0,ge_Data(a0)
  1506.  
  1507.          mulu      ge_Temp+2(a0),d0
  1508.          sub.l     d2,d1
  1509.          beq.s     .FullKnob
  1510.  
  1511.          divu      d1,d0
  1512.          ext.l     d0
  1513.  
  1514.          move.l    ge_Temp(a0),d1
  1515.          cmp.l     d0,d1
  1516.          bcc.s     .MaxPosOk
  1517.          move.l    d1,d0
  1518. .MaxPosOk:
  1519.  
  1520.          addq.l    #4,d0
  1521.          move.l    d0,ge_Temp2(a0)
  1522.          rts
  1523.  
  1524. .FullKnob:
  1525.          moveq     #2,d0
  1526.          move.l    d0,ge_Temp2(a0)
  1527.          rts
  1528.  
  1529. HPRender:
  1530.          moveq     #0,d0
  1531.          moveq     #0,d1
  1532.          movem.l   ge_Domain+gd_Width(a0),d2-3
  1533.          sf        d4
  1534.          bsr.s     _DrawBevelBox
  1535.  
  1536.          moveq     #2,d0
  1537.          moveq     #1,d1
  1538.          movem.l   ge_Domain+gd_Width(a0),d2-3
  1539.          subq.l    #4,d2
  1540.          subq.l    #2,d3
  1541.          st        d4
  1542.          bsr.s     _DrawBevelBox
  1543.  
  1544. HPRenderKnob:
  1545.          moveq     #2,d1
  1546.          moveq     #8,d3
  1547.          movem.l   ge_Temp2(a0),d0/d2
  1548.          sf        d4
  1549.          bsr.s     _DrawBevelBox
  1550.  
  1551.          moveq     #4,d1
  1552.          move.l    ge_Temp3(a0),d0
  1553.          subq.l    #6,d0
  1554.          lsr.l     #1,d0
  1555.          add.l     ge_Temp2(a0),d0
  1556.          bra.s     _DrawPropHole
  1557.  
  1558. HPRenderKnobSelected:
  1559.          moveq     #2,d1
  1560.          moveq     #8,d3
  1561.          movem.l   ge_Temp2(a0),d0/d2
  1562.          sf        d4
  1563.          bsr.s     _DrawBevelBox
  1564.  
  1565.          moveq     #3,d5
  1566.          moveq     #6,d7
  1567.          movem.l   ge_Temp2(a0),d4/d6
  1568.          addq.l    #2,d4
  1569.          subq.l    #4,d6
  1570.          moveq     #3,d3
  1571.          bsr.s     _DrawRectangle
  1572.  
  1573.          moveq     #4,d1
  1574.          move.l    ge_Temp3(a0),d0
  1575.          subq.l    #6,d0
  1576.          lsr.l     #1,d0
  1577.          add.l     ge_Temp2(a0),d0
  1578.          bra.s     _DrawPropHole
  1579.  
  1580. HPClearKnob:
  1581.          moveq     #2,d5
  1582.          moveq     #8,d7
  1583.          movem.l   ge_Temp2(a0),d4/d6
  1584.          moveq     #0,d3
  1585.          bra.s     _DrawRectangle
  1586.  
  1587. HPClick:
  1588.          move.l    d0,d3
  1589.          sub.l     ge_Domain+gd_Left(a0),d0
  1590.  
  1591.          move.l    ge_Temp2(a0),d2
  1592.          cmp.l     d2,d0
  1593.          bcs.s     .BeforeKnob
  1594.          add.l     ge_Temp3(a0),d2
  1595.          cmp.l     d2,d0
  1596.          bcc.s     .AfterKnob
  1597.  
  1598.          sub.l     ge_Temp2(a0),d3
  1599.          move.l    d3,HPOffset
  1600.  
  1601.          add.l     _GuiPos(pc),d1
  1602.          move.l    d1,_MinMouseY
  1603.          move.l    d1,_MaxMouseY
  1604.  
  1605.          addq.l    #4,d3
  1606.          move.l    d3,d1
  1607.  
  1608.          move.l    d3,_MinMouseX
  1609.  
  1610.          add.l     ge_Temp(a0),d1
  1611.          move.l    d1,_MaxMouseX
  1612.  
  1613.          move.l    a0,_ActiveGuiEntry
  1614.          lea       HPHandler(pc),a1
  1615.          move.l    a1,_ActiveThingHandler
  1616.          bra       HPRenderKnobSelected
  1617.  
  1618. .BeforeKnob:
  1619.          move.l    ge_Data3(a0),d1
  1620.          subq.l    #1,d1
  1621.          bne.s     .BKOkIncr
  1622.          moveq     #1,d1
  1623. .BKOkIncr:
  1624.  
  1625.          move.l    ge_Data(a0),d0
  1626.          sub.l     d1,d0
  1627.  
  1628. .KnobOk:
  1629.          move.l    d0,ge_Data(a0)
  1630.  
  1631.          bsr       HPClearKnob
  1632.  
  1633.          bsr       HPCalcKnobPos
  1634.  
  1635.          lea       HPWaitHandler(pc),a1
  1636.          move.l    a1,_ActiveThingHandler
  1637.  
  1638.          move.l    ge_Hook(a0),d0
  1639.          beq       HPRenderKnob
  1640.          move.l    d0,a1
  1641.          move.l    ge_Data(a0),d0
  1642.  
  1643.          move.l    a0,-(a7)
  1644.          jsr       (a1)
  1645.          move.l    (a7)+,a0
  1646.  
  1647.          bra       HPRenderKnob
  1648.  
  1649. .AfterKnob:
  1650.          move.l    ge_Data3(a0),d1
  1651.          subq.l    #1,d1
  1652.          bne.s     .AKOkIncr
  1653.          moveq     #1,d1
  1654. .AKOkIncr:
  1655.  
  1656.          move.l    ge_Data(a0),d0
  1657.          add.l     d1,d0
  1658.  
  1659.          bra.s     .KnobOk
  1660.  
  1661. HPWaitHandler:
  1662.          btst      #6,$bfe001
  1663.          beq.s     .Done
  1664.          clr.l     _ActiveThingHandler
  1665. .Done:
  1666.          rts
  1667.  
  1668. HPHandler:
  1669.          btst      #6,$bfe001
  1670.          bne.s     .Release
  1671.  
  1672.          sub.l     HPOffset(pc),d0
  1673.  
  1674.          cmp.l     ge_Temp2(a0),d0
  1675.          beq.s     .Done
  1676.  
  1677.          bsr.s     HPClearKnob
  1678.          move.l    d0,ge_Temp2(a0)
  1679.          bsr.s     HPRenderKnobSelected
  1680.  
  1681.          move.l    ge_Temp2(a0),d0
  1682.          subq.l    #4,d0
  1683.          move.l    ge_Data2(a0),d1
  1684.          sub.l     ge_Data3(a0),d1
  1685.          mulu      d1,d0
  1686.          move.l    ge_Temp(a0),d1
  1687.          divu      d1,d0
  1688.          ext.l     d0
  1689.  
  1690.          move.l    d0,ge_Data(a0)
  1691.  
  1692.          move.l    ge_Hook(a0),d1
  1693.          beq.s     .Done
  1694.          move.l    d1,a1
  1695.          jmp       (a1)
  1696.  
  1697. .Done:
  1698.          rts
  1699. .Release:
  1700.          clr.l     _MinMouseX
  1701.          clr.l     _MinMouseY
  1702.  
  1703.          move.l    #GuiScreenWidth,_MaxMouseX
  1704.          move.l    #256,_MaxMouseY
  1705.  
  1706.          clr.l     _ActiveThingHandler
  1707.          clr.l     _ActiveGuiEntry
  1708.          bsr.s     HPClearKnob
  1709.          bra.s     HPRenderKnob
  1710.  
  1711. HPOffset:
  1712.          ds.l      1
  1713. ;fe
  1714. ;fs "_VProp"
  1715. _VProp:
  1716.          dc.l      VPGetMinMax
  1717.          dc.l      VPLayout
  1718.          dc.l      VPRender
  1719.          dc.l      VPClick
  1720.  
  1721. VPGetMinMax:
  1722.          moveq     #19,d0
  1723.          move.l    d0,ge_MinHeight(a0)
  1724.          moveq     #0,d0
  1725.          move.l    d0,ge_MaxHeight(a0)
  1726.  
  1727.          moveq     #20,d0
  1728.          move.l    d0,ge_MinWidth(a0)
  1729.          move.l    d0,ge_MaxWidth(a0)
  1730.  
  1731.          lea       ge_Size(a0),a1
  1732.          move.l    a1,ge_Next(a0)
  1733.          rts
  1734.  
  1735. VPLayout:
  1736.          move.l    ge_Domain+gd_Height(a0),d0
  1737.          sub.l     #4,d0
  1738.          move.l    d0,d1
  1739.          move.l    ge_Data2(a0),d2
  1740.  
  1741.          move.l    ge_Data3(a0),d3
  1742.          cmp.l     d2,d3
  1743.          bcc.s     .FullKnob
  1744.  
  1745.          mulu      d3,d1
  1746.          divu      d2,d1
  1747.          ext.l     d1
  1748.  
  1749.          cmp.l     #8,d1
  1750.          bcc.s     .FullKnob
  1751.          moveq     #8,d1
  1752.  
  1753. .FullKnob:
  1754.          move.l    d1,ge_Temp3(a0)
  1755.  
  1756.          sub.l     d1,d0
  1757.          move.l    d0,ge_Temp(a0)
  1758.  
  1759. VPCalcKnobPos:
  1760.          movem.l   ge_Data2(a0),d1-2
  1761.          move.l    ge_Data(a0),d0
  1762.          bpl.s     .MinOk
  1763.          moveq     #0,d0
  1764. .MinOk:
  1765.  
  1766.          move.l    d1,d3
  1767.          sub.l     d2,d3
  1768.          bpl.s     .Ok
  1769.          moveq     #0,d3
  1770. .Ok:
  1771.  
  1772.          cmp.l     d0,d3
  1773.          bcc.s     .MaxOk
  1774.          move.l    d3,d0
  1775. .MaxOk:
  1776.  
  1777.          move.l    d0,ge_Data(a0)
  1778.  
  1779.          mulu      ge_Temp+2(a0),d0
  1780.          sub.l     d2,d1
  1781.          beq.s     .FullKnob
  1782.  
  1783.          divu      d1,d0
  1784.          ext.l     d0
  1785.  
  1786.          move.l    ge_Temp(a0),d1
  1787.          cmp.l     d0,d1
  1788.          bcc.s     .MaxPosOk
  1789.          move.l    d1,d0
  1790. .MaxPosOk:
  1791.  
  1792.          addq.l    #2,d0
  1793.          move.l    d0,ge_Temp2(a0)
  1794.          rts
  1795.  
  1796. .FullKnob:
  1797.          moveq     #2,d0
  1798.          move.l    d0,ge_Temp2(a0)
  1799.          rts
  1800.  
  1801. VPRender:
  1802.          moveq     #0,d0
  1803.          moveq     #0,d1
  1804.          movem.l   ge_Domain+gd_Width(a0),d2-3
  1805.          sf        d4
  1806.          bsr.s     _DrawBevelBox
  1807.  
  1808.          moveq     #2,d0
  1809.          moveq     #1,d1
  1810.          movem.l   ge_Domain+gd_Width(a0),d2-3
  1811.          subq.l    #4,d2
  1812.          subq.l    #2,d3
  1813.          st        d4
  1814.          bsr.s     _DrawBevelBox
  1815.  
  1816. VPRenderKnob:
  1817.          moveq     #4,d0
  1818.          move.l    #12,d2
  1819.          movem.l   ge_Temp2(a0),d1/d3
  1820.          sf        d4
  1821.          bsr.s     _DrawBevelBox
  1822.  
  1823.          moveq     #7,d0
  1824.          move.l    ge_Temp3(a0),d1
  1825.          subq.l    #4,d1
  1826.          lsr.l     #1,d1
  1827.          add.l     ge_Temp2(a0),d1
  1828.          bra.s     _DrawPropHole
  1829.  
  1830. VPRenderKnobSelected:
  1831.          moveq     #4,d0
  1832.          moveq     #12,d2
  1833.          movem.l   ge_Temp2(a0),d1/d3
  1834.          sf        d4
  1835.          bsr.s     _DrawBevelBox
  1836.  
  1837.          moveq     #6,d4
  1838.          moveq     #8,d6
  1839.          movem.l   ge_Temp2(a0),d5/d7
  1840.          addq.l    #1,d5
  1841.          subq.l    #2,d7
  1842.          moveq     #3,d3
  1843.          bsr.s     _DrawRectangle
  1844.  
  1845.          moveq     #7,d0
  1846.          move.l    ge_Temp3(a0),d1
  1847.          subq.l    #4,d1
  1848.          lsr.l     #1,d1
  1849.          add.l     ge_Temp2(a0),d1
  1850.          bra.s     _DrawPropHole
  1851.  
  1852. VPClearKnob:
  1853.          moveq     #4,d4
  1854.          moveq     #12,d6
  1855.          movem.l   ge_Temp2(a0),d5/d7
  1856.          moveq     #0,d3
  1857.          bra.s     _DrawRectangle
  1858.  
  1859. VPClick:
  1860.          move.l    d1,d3
  1861.          sub.l     ge_Domain+gd_Top(a0),d1
  1862.  
  1863.          move.l    ge_Temp2(a0),d2
  1864.          cmp.l     d2,d1
  1865.          bcs.s     .BeforeKnob
  1866.          add.l     ge_Temp3(a0),d2
  1867.          cmp.l     d2,d1
  1868.          bcc.s     .AfterKnob
  1869.  
  1870.          sub.l     ge_Temp2(a0),d3
  1871.          move.l    d3,VPOffset
  1872.  
  1873.          move.l    d0,_MinMouseX
  1874.          move.l    d0,_MaxMouseX
  1875.  
  1876.          add.l     _GuiPos(pc),d3
  1877.          addq.l    #2,d3
  1878.          move.l    d3,d1
  1879.          move.l    d3,_MinMouseY
  1880.  
  1881.          add.l     ge_Temp(a0),d1
  1882.          move.l    d1,_MaxMouseY
  1883.  
  1884.          move.l    a0,_ActiveGuiEntry
  1885.          lea       VPHandler(pc),a1
  1886.          move.l    a1,_ActiveThingHandler
  1887.          bra       VPRenderKnobSelected
  1888.  
  1889. .BeforeKnob:
  1890.          move.l    ge_Data3(a0),d1
  1891.          subq.l    #1,d1
  1892.          bne.s     .BKOkIncr
  1893.          moveq     #1,d1
  1894. .BKOkIncr:
  1895.  
  1896.          move.l    ge_Data(a0),d0
  1897.          sub.l     d1,d0
  1898.  
  1899. .KnobOk:
  1900.          move.l    d0,ge_Data(a0)
  1901.  
  1902.          bsr       VPClearKnob
  1903.  
  1904.          bsr       VPCalcKnobPos
  1905.  
  1906.          lea       VPWaitHandler(pc),a1
  1907.          move.l    a1,_ActiveThingHandler
  1908.  
  1909.          move.l    ge_Hook(a0),d0
  1910.          beq       VPRenderKnob
  1911.          move.l    d0,a1
  1912.          move.l    ge_Data(a0),d0
  1913.  
  1914.          move.l    a0,-(a7)
  1915.          jsr       (a1)
  1916.          move.l    (a7)+,a0
  1917.  
  1918.          bra       VPRenderKnob
  1919.  
  1920. .AfterKnob:
  1921.          move.l    ge_Data3(a0),d1
  1922.          subq.l    #1,d1
  1923.          bne.s     .AKOkIncr
  1924.          moveq     #1,d1
  1925. .AKOkIncr:
  1926.  
  1927.          move.l    ge_Data(a0),d0
  1928.          add.l     d1,d0
  1929.  
  1930.          bra.s     .KnobOk
  1931.  
  1932. VPWaitHandler:
  1933.          btst      #6,$bfe001
  1934.          beq.s     .Done
  1935.          clr.l     _ActiveThingHandler
  1936. .Done:
  1937.          rts
  1938.  
  1939. VPHandler:
  1940.          btst      #6,$bfe001
  1941.          bne.s     .Release
  1942.  
  1943.          sub.l     VPOffset(pc),d1
  1944.  
  1945.          cmp.l     ge_Temp2(a0),d1
  1946.          beq.s     .Done
  1947.  
  1948.          bsr.s     VPClearKnob
  1949.          move.l    d1,ge_Temp2(a0)
  1950.          bsr.s     VPRenderKnobSelected
  1951.  
  1952.          move.l    ge_Temp2(a0),d1
  1953.          subq.l    #2,d1
  1954.          move.l    ge_Data2(a0),d0
  1955.          sub.l     ge_Data3(a0),d0
  1956.          mulu      d0,d1
  1957.          move.l    ge_Temp(a0),d0
  1958.          divu      d0,d1
  1959.          ext.l     d1
  1960.          move.l    d1,ge_Data(a0)
  1961.  
  1962.          move.l    d1,d0
  1963.          move.l    ge_Hook(a0),d1
  1964.          beq.s     .Done
  1965.          move.l    d1,a1
  1966.          jmp       (a1)
  1967.  
  1968. .Done:
  1969.          rts
  1970. .Release:
  1971.          clr.l     _MinMouseX
  1972.          clr.l     _MinMouseY
  1973.  
  1974.          move.l    #GuiScreenWidth,_MaxMouseX
  1975.          move.l    #256,_MaxMouseY
  1976.  
  1977.          clr.l     _ActiveThingHandler
  1978.          clr.l     _ActiveGuiEntry
  1979.          bsr.s     VPClearKnob
  1980.          bra.s     VPRenderKnob
  1981.  
  1982. VPOffset:
  1983.          ds.l      1
  1984. ;fe
  1985. ;fs "_DrawPropHole"
  1986. _DrawPropHole:     ; d0/d1=X,Y
  1987.          movem.l   d0-3/a0,-(a7)
  1988.  
  1989.          move.l    _CurrentDomain(pc),a0
  1990.          add.l     gd_Left(a0),d0
  1991.          add.l     gd_Top(a0),d1
  1992.  
  1993.          move.l    _GuiBitmap(pc),a0
  1994.          mulu      #GuiLineSize,d1
  1995.          add.l     d1,a0
  1996.          move.l    d0,d1
  1997.          lsr.l     #3,d1
  1998.          add.l     d1,a0
  1999.  
  2000.          not.l     d0
  2001.          and.l     #7,d0
  2002.          addq.l    #3,d0
  2003.  
  2004. .RWait:
  2005.          tst.l     _RectCount
  2006.          bne.s     .RWait
  2007.  
  2008.          moveq     #$1c,d1
  2009.          lsl.w     d0,d1
  2010.          or.w      d1,(a0)
  2011.          lea       GuiBufferWidth(a0),a0
  2012.          not.w     d1
  2013.          and.w     d1,(a0)
  2014.          lea       GuiBufferWidth(a0),a0
  2015.  
  2016.          moveq     #$3f,d1
  2017.          lsl.w     d0,d1
  2018.          not.w     d1
  2019.  
  2020.          move.w    (a0),d3
  2021.          and.w     d1,d3
  2022.          moveq     #$38,d2
  2023.          lsl.w     d0,d2
  2024.          or.w      d2,d3
  2025.          move.w    d3,(a0)
  2026.          lea       GuiBufferWidth(a0),a0
  2027.          move.w    (a0),d3
  2028.          and.w     d1,d3
  2029.          moveq     #3,d2
  2030.          lsl.w     d0,d2
  2031.          or.w      d2,d3
  2032.          move.w    d3,(a0)
  2033.          lea       GuiBufferWidth(a0),a0
  2034.  
  2035.          move.w    (a0),d3
  2036.          and.w     d1,d3
  2037.          moveq     #$30,d2
  2038.          lsl.w     d0,d2
  2039.          or.w      d2,d3
  2040.          move.w    d3,(a0)
  2041.          lea       GuiBufferWidth(a0),a0
  2042.          move.w    (a0),d3
  2043.          and.w     d1,d3
  2044.          moveq     #7,d2
  2045.          lsl.w     d0,d2
  2046.          or.w      d2,d3
  2047.          move.w    d3,(a0)
  2048.          lea       GuiBufferWidth(a0),a0
  2049.  
  2050.          moveq     #$e,d1
  2051.          lsl.w     d0,d1
  2052.          move.w    d1,d2
  2053.          not.w     d2
  2054.          and.w     d2,(a0)
  2055.          lea       GuiBufferWidth(a0),a0
  2056.          or.w      d1,(a0)
  2057.  
  2058.          movem.l   (a7)+,d0-3/a0
  2059.          rts
  2060. ;fe
  2061. ;fs "_HScroller"
  2062. _HScroller:
  2063.          dc.l      HSCGetMinMax
  2064.          dc.l      HSCLayout
  2065.          dc.l      HSCRender
  2066.          dc.l      HSCClick
  2067.  
  2068. HSCGetMinMax:
  2069.          moveq     #0,d0
  2070.          move.l    _CtGuiTemp(pc),a1
  2071.          move.l    a1,ge_Temp(a0)
  2072.          lea       ge_Size*7(a1),a2
  2073.          move.l    a2,_CtGuiTemp
  2074.  
  2075.          move.l    #_HGroup,(a1)
  2076.          lea       ge_Size(a1),a1
  2077.  
  2078.          move.l    a1,ge_Temp2(a0)
  2079.          move.l    #_HProp,(a1)
  2080.          move.l    ge_Data(a0),ge_Data(a1)
  2081.          move.l    ge_Data2(a0),ge_Data2(a1)
  2082.          move.l    ge_Data3(a0),ge_Data3(a1)
  2083.          move.l    a0,ge_ID(a1)
  2084.          move.l    #HSCHook,ge_Hook(a1)
  2085.  
  2086.          lea       ge_Size(a1),a1
  2087.          move.l    #_HSpacingEater,(a1)
  2088.  
  2089.          lea       ge_Size(a1),a1
  2090.          move.l    #_SmallButton,(a1)
  2091.          move.l    #$8e,ge_Data(a1)
  2092.          move.l    a0,ge_ID(a1)
  2093.          move.l    #HSCRelHook,ge_Hook(a1)
  2094.          move.l    #HSCDecrHook,ge_Data2(a1)
  2095.          move.l    d0,ge_Data3(a1)
  2096.  
  2097.          lea       ge_Size(a1),a1
  2098.          move.l    #_HSpacingEater,(a1)
  2099.  
  2100.          lea       ge_Size(a1),a1
  2101.          move.l    #_SmallButton,(a1)
  2102.          move.l    #$8d,ge_Data(a1)
  2103.          move.l    a0,ge_ID(a1)
  2104.          move.l    #HSCRelHook,ge_Hook(a1)
  2105.          move.l    #HSCIncrHook,ge_Data2(a1)
  2106.          move.l    d0,ge_Data3(a1)
  2107.  
  2108.          lea       ge_Size(a1),a1
  2109.          clr.l     (a1)
  2110.  
  2111.          move.l    a0,a1
  2112.          move.l    ge_Temp(a1),a0
  2113.          bsr       _GetMinMax
  2114.  
  2115.          move.l    ge_MinWidth(a0),ge_MinWidth(a1)
  2116.          move.l    ge_MaxWidth(a0),ge_MaxWidth(a1)
  2117.          move.l    ge_MinHeight(a0),ge_MinHeight(a1)
  2118.          move.l    ge_MaxHeight(a0),ge_MaxHeight(a1)
  2119.  
  2120.          lea       ge_Size(a1),a0
  2121.          move.l    a0,ge_Next(a1)
  2122.          rts
  2123.  
  2124. HSCLayout:
  2125.          move.l    a0,a2
  2126.          move.l    ge_Temp2(a0),a3
  2127.          movem.l   ge_Data(a0),d0-2
  2128.          movem.l   d0-2,ge_Data(a3)
  2129.  
  2130.          move.l    a0,a1
  2131.          move.l    ge_Temp(a1),a0
  2132.  
  2133.          movem.l   ge_Domain(a1),d0-5
  2134.          movem.l   d0-5,ge_Domain(a0)
  2135.  
  2136.          bsr       _Layout
  2137.  
  2138.          move.l    ge_Data(a3),ge_Data(a2)
  2139.          rts
  2140.  
  2141. HSCRender:
  2142.          move.l    ge_Temp(a0),a0
  2143.          bra       _Render
  2144.  
  2145. HSCClick:
  2146.          move.l    ge_Temp(a0),a0
  2147.          bra       _DoClick
  2148.  
  2149. HSCHook:
  2150.          move.l    ge_ID(a0),a1
  2151.          movem.l   ge_Data(a0),d0-2
  2152.          movem.l   d0-2,ge_Data(a1)
  2153.  
  2154. HSCCallHook:
  2155.          move.l    ge_Hook(a1),d1
  2156.          beq.s     .Done
  2157.          move.l    a1,a0
  2158.          move.l    d1,a1
  2159.          jmp       (a1)
  2160.  
  2161. .Done:
  2162.          rts
  2163.  
  2164. HSCDecrHook:
  2165.          sub.l     #1,HSCHookCount
  2166.          bpl.s     .Done
  2167.  
  2168.          move.l    #5,HSCHookCount
  2169.          move.l    ge_ID(a0),a1
  2170.          move.l    ge_Temp2(a1),a0
  2171.          sub.l     #1,ge_Data(a0)
  2172.          bsr       _RefreshGuiEntry
  2173.  
  2174.          move.l    ge_Data(a0),d0
  2175.          move.l    d0,ge_Data(a1)
  2176.          bra.s     HSCCallHook
  2177.  
  2178. .Done:
  2179.          rts
  2180.  
  2181. HSCIncrHook:
  2182.          sub.l     #1,HSCHookCount
  2183.          bpl.s     .Done
  2184.  
  2185.          move.l    #5,HSCHookCount
  2186.          move.l    ge_ID(a0),a1
  2187.          move.l    ge_Temp2(a1),a0
  2188.          add.l     #1,ge_Data(a0)
  2189.          bsr       _RefreshGuiEntry
  2190.  
  2191.          move.l    ge_Data(a0),d0
  2192.          move.l    d0,ge_Data(a1)
  2193.          bra.s     HSCCallHook
  2194.  
  2195. .Done:
  2196.          rts
  2197.  
  2198. HSCRelHook:
  2199.          clr.l     HSCHookCount
  2200.          rts
  2201.  
  2202. HSCHookCount:
  2203.          dc.l      0
  2204. ;fe
  2205. ;fs "_VScroller"
  2206. _VScroller:
  2207.          dc.l      VSCGetMinMax
  2208.          dc.l      VSCLayout
  2209.          dc.l      VSCRender
  2210.          dc.l      VSCClick
  2211.  
  2212. VSCGetMinMax:
  2213.          moveq     #1,d0
  2214.          move.l    _CtGuiTemp(pc),a1
  2215.          move.l    a1,ge_Temp(a0)
  2216.          lea       ge_Size*7(a1),a2
  2217.          move.l    a2,_CtGuiTemp
  2218.  
  2219.          move.l    #_VGroup,(a1)
  2220.          lea       ge_Size(a1),a1
  2221.  
  2222.          move.l    a1,ge_Temp2(a0)
  2223.          move.l    #_VProp,(a1)
  2224.          move.l    ge_Data(a0),ge_Data(a1)
  2225.          move.l    ge_Data2(a0),ge_Data2(a1)
  2226.          move.l    ge_Data3(a0),ge_Data3(a1)
  2227.          move.l    a0,ge_ID(a1)
  2228.          move.l    #VSCHook,ge_Hook(a1)
  2229.          lea       ge_Size(a1),a1
  2230.  
  2231.          move.l    #_VSpacingEater,(a1)
  2232.          lea       ge_Size(a1),a1
  2233.  
  2234.          move.l    #_SmallButton,(a1)
  2235.          move.l    #$90,ge_Data(a1)
  2236.          move.l    a0,ge_ID(a1)
  2237.          move.l    #VSCRelHook,ge_Hook(a1)
  2238.          move.l    #VSCDecrHook,ge_Data2(a1)
  2239.          move.l    d0,ge_Data3(a1)
  2240.          lea       ge_Size(a1),a1
  2241.  
  2242.          move.l    #_VSpacingEater,(a1)
  2243.          lea       ge_Size(a1),a1
  2244.  
  2245.          move.l    #_SmallButton,(a1)
  2246.          move.l    #$8f,ge_Data(a1)
  2247.          move.l    a0,ge_ID(a1)
  2248.          move.l    #VSCRelHook,ge_Hook(a1)
  2249.          move.l    #VSCIncrHook,ge_Data2(a1)
  2250.          move.l    d0,ge_Data3(a1)
  2251.          lea       ge_Size(a1),a1
  2252.  
  2253.          clr.l     (a1)
  2254.  
  2255.          move.l    a0,a1
  2256.          move.l    ge_Temp(a1),a0
  2257.          bsr       _GetMinMax
  2258.  
  2259.          move.l    ge_MinWidth(a0),ge_MinWidth(a1)
  2260.          move.l    ge_MaxWidth(a0),ge_MaxWidth(a1)
  2261.          move.l    ge_MinHeight(a0),ge_MinHeight(a1)
  2262.          move.l    ge_MaxHeight(a0),ge_MaxHeight(a1)
  2263.  
  2264.          lea       ge_Size(a1),a0
  2265.          move.l    a0,ge_Next(a1)
  2266.          rts
  2267.  
  2268. VSCLayout:
  2269.          move.l    a0,a2
  2270.          move.l    ge_Temp2(a0),a3
  2271.          movem.l   ge_Data(a0),d0-2
  2272.          movem.l   d0-2,ge_Data(a3)
  2273.  
  2274.          move.l    a0,a1
  2275.          move.l    ge_Temp(a1),a0
  2276.  
  2277.          movem.l   ge_Domain(a1),d0-5
  2278.          movem.l   d0-5,ge_Domain(a0)
  2279.  
  2280.          bsr       _Layout
  2281.  
  2282.          move.l    ge_Data(a3),ge_Data(a2)
  2283.          rts
  2284.  
  2285. VSCRender:
  2286.          move.l    ge_Temp(a0),a0
  2287.          bra       _Render
  2288.  
  2289. VSCClick:
  2290.          move.l    ge_Temp(a0),a0
  2291.          bra       _DoClick
  2292.  
  2293. VSCHook:
  2294.          move.l    ge_ID(a0),a1
  2295.          movem.l   ge_Data(a0),d0-2
  2296.          movem.l   d0-2,ge_Data(a1)
  2297.  
  2298. VSCCallHook:
  2299.          move.l    ge_Hook(a1),d1
  2300.          beq.s     .Done
  2301.          move.l    a1,a0
  2302.          move.l    d1,a1
  2303.          jmp       (a1)
  2304.  
  2305. .Done:
  2306.          rts
  2307.  
  2308. VSCDecrHook:
  2309.          sub.l     #1,VSCHookCount
  2310.          bpl.s     .Done
  2311.  
  2312.          move.l    #5,VSCHookCount
  2313.          move.l    ge_ID(a0),a1
  2314.          move.l    ge_Temp2(a1),a0
  2315.          sub.l     #1,ge_Data(a0)
  2316.          bsr       _RefreshGuiEntry
  2317.  
  2318.          move.l    ge_Data(a0),d0
  2319.          move.l    d0,ge_Data(a1)
  2320.          bra.s     VSCCallHook
  2321.  
  2322. .Done:
  2323.          rts
  2324.  
  2325. VSCIncrHook:
  2326.          sub.l     #1,VSCHookCount
  2327.          bpl.s     .Done
  2328.  
  2329.          move.l    #5,VSCHookCount
  2330.          move.l    ge_ID(a0),a1
  2331.          move.l    ge_Temp2(a1),a0
  2332.          add.l     #1,ge_Data(a0)
  2333.          bsr       _RefreshGuiEntry
  2334.  
  2335.          move.l    ge_Data(a0),d0
  2336.          move.l    d0,ge_Data(a1)
  2337.          bra.s     VSCCallHook
  2338.  
  2339. .Done:
  2340.          rts
  2341.  
  2342. VSCRelHook:
  2343.          clr.l     VSCHookCount
  2344.          rts
  2345.  
  2346. VSCHookCount:
  2347.          dc.l      0
  2348. ;fe
  2349. ;fs "_ListView"
  2350. _ListView:
  2351.          dc.l      LVGetMinMax
  2352.          dc.l      LVLayout
  2353.          dc.l      LVRender
  2354.          dc.l      LVClick
  2355.  
  2356. LVGetMinMax:
  2357.          moveq     #1,d0
  2358.          move.l    _CtGuiTemp(pc),a1
  2359.          move.l    a1,ge_Temp(a0)
  2360.          lea       ge_Size*5(a1),a2
  2361.          move.l    a2,_CtGuiTemp
  2362.  
  2363.          move.l    #_HGroup,(a1)
  2364.          lea       ge_Size(a1),a1
  2365.  
  2366.          move.l    a1,ge_Temp2(a0)
  2367.          move.l    #IntListView,(a1)
  2368.          move.l    ge_Data3(a0),ge_Temp3(a1)
  2369.          move.l    a0,ge_ID(a1)
  2370.          move.l    ge_Hook(a0),ge_Hook(a1)
  2371.          lea       ge_Size(a1),a1
  2372.  
  2373.          move.l    #_HSpacingEater,(a1)
  2374.          lea       ge_Size(a1),a1
  2375.  
  2376.          move.l    a1,ge_Temp3(a0)
  2377.          move.l    #_VScroller,(a1)
  2378.          move.l    ge_Data2(a0),ge_Data(a1)
  2379.          move.l    a0,ge_ID(a1)
  2380.          move.l    #LVHook,ge_Hook(a1)
  2381.          lea       ge_Size(a1),a1
  2382.  
  2383.          clr.l     (a1)
  2384.  
  2385.          move.l    a0,a1
  2386.          move.l    ge_Temp(a1),a0
  2387.          bsr       _GetMinMax
  2388.  
  2389.          move.l    ge_MinWidth(a0),ge_MinWidth(a1)
  2390.          move.l    ge_MaxWidth(a0),ge_MaxWidth(a1)
  2391.          move.l    ge_MinHeight(a0),ge_MinHeight(a1)
  2392.          move.l    ge_MaxHeight(a0),ge_MaxHeight(a1)
  2393.  
  2394.          lea       ge_Size(a1),a0
  2395.          move.l    a0,ge_Next(a1)
  2396.          rts
  2397.  
  2398. LVLayout:
  2399.          move.l    ge_Data(a0),a1
  2400.          moveq     #0,d6
  2401.          move.l    (a1),a1
  2402.  
  2403.          move.l    (a1),d7
  2404.          beq.s     .EmptyList
  2405.          move.l    d7,d0
  2406.          move.l    a1,d7
  2407.  
  2408. .CountEntries:
  2409.          addq.l    #1,d6
  2410.  
  2411.          move.l    d0,a1
  2412.          move.l    (a1),d0
  2413.          bne.s     .CountEntries
  2414.  
  2415. .EmptyList:
  2416.  
  2417.          move.l    a0,a3
  2418.          move.l    ge_Temp(a0),a0
  2419.  
  2420.          movem.l   ge_Domain(a3),d0-5
  2421.          movem.l   d0-5,ge_Domain(a0)
  2422.  
  2423.          subq.l    #3,d5
  2424.          lsr.l     #3,d5
  2425.          move.l    ge_Temp2(a3),a1
  2426.          move.l    d5,ge_Temp(a1)
  2427.          move.l    d7,ge_Temp2(a1)
  2428.          lea       ge_Size*2(a1),a1
  2429.          move.l    d6,ge_Data2(a1)
  2430.          move.l    d5,ge_Data3(a1)
  2431.  
  2432.          bsr       _Layout
  2433.  
  2434.          move.l    a3,a0
  2435.  
  2436. LVFirstVisAddress:
  2437.          move.l    ge_Temp3(a0),a2
  2438.          sub.l     a1,a1
  2439.  
  2440.          tst.l     ge_Data2(a2)
  2441.          beq.s     .EmptyList
  2442.  
  2443.          move.l    ge_Data(a2),d0
  2444.          move.l    ge_Data(a0),a1
  2445.  
  2446. .Loop:
  2447.          move.l    (a1),a1
  2448.          dbf       d0,.Loop
  2449.  
  2450. .EmptyList:
  2451.          move.l    ge_Temp2(a0),a2
  2452.          move.l    a1,ge_Temp2(a2)
  2453.          rts
  2454.  
  2455. LVRender:
  2456.          move.l    a0,a1
  2457.          move.l    ge_Temp3(a1),a0
  2458.          bsr       _RefreshGuiEntry
  2459.          move.l    ge_Temp2(a1),a0
  2460.          bra       _Render
  2461.  
  2462. LVClick:
  2463.          move.l    ge_Temp(a0),a0
  2464.          bra       _DoClick
  2465.  
  2466. LVHook:
  2467.          move.l    _CurrentDomain,-(a7)
  2468.          move.l    a0,a1
  2469.          move.l    ge_ID(a1),a0
  2470.          move.l    ge_Data(a1),ge_Data2(a0)
  2471.          bsr.s     LVFirstVisAddress
  2472.          move.l    ge_Temp2(a0),a0
  2473.          lea       ge_Domain(a0),a1
  2474.          move.l    a1,_CurrentDomain
  2475.          bsr       ILVClear
  2476.          bsr       ILVRenderEntries
  2477.          move.l    (a7)+,_CurrentDomain
  2478.          rts
  2479.  
  2480. IntListView:
  2481.          dc.l      ILVGetMinMax
  2482.          dc.l      0
  2483.          dc.l      ILVRender
  2484.          dc.l      ILVClick
  2485.  
  2486. ILVGetMinMax:
  2487.          move.l    #40,ge_MinWidth(a0)
  2488.          move.l    #12,ge_MinHeight(a0)
  2489.  
  2490.          clr.l     ge_MaxWidth(a0)
  2491.          clr.l     ge_MaxHeight(a0)
  2492.  
  2493.          lea       ge_Size(a0),a1
  2494.          move.l    a1,ge_Next(a0)
  2495.          rts
  2496.  
  2497. ILVRender:
  2498.          moveq     #0,d0
  2499.          moveq     #0,d1
  2500.          move.l    ge_Domain+gd_Width(a0),d2
  2501.          move.l    ge_Domain+gd_Height(a0),d3
  2502.          sf        d4
  2503.          bsr       _DrawBevelBox
  2504.  
  2505. ILVRenderEntries:
  2506.          moveq     #-1,d0
  2507.          move.l    d0,ge_Data2(a0)
  2508.  
  2509.          move.l    ge_Domain+gd_Width(a0),d0
  2510.          subq.l    #6,d0
  2511.          move.l    d0,_TextLimit
  2512.  
  2513.          move.l    ge_Temp2(a0),d0
  2514.          beq.s     .EmptyList
  2515.          move.l    d0,a1
  2516.          move.l    (a1),d0
  2517.  
  2518.          move.l    ge_Temp(a0),d1
  2519.          subq.l    #1,d1
  2520.          move.l    ge_Temp3(a0),a2
  2521.  
  2522.          moveq     #1,d2
  2523.  
  2524. .Loop:
  2525.          moveq     #0,d3
  2526.          cmp.l     a1,a2
  2527.          bne.s     .NoSel
  2528.          moveq     #3,d3
  2529. .NoSel:
  2530.  
  2531.          moveq     #2,d4
  2532.          move.l    d2,d5
  2533.          move.l    ge_Domain+gd_Width(a0),d6
  2534.          subq.l    #4,d6
  2535.          moveq     #8,d7
  2536.          move.l    d5,ge_Data2(a0)
  2537.          bsr       _DrawRectangle
  2538.  
  2539. ;.NoSel:
  2540.  
  2541.          move.l    lve_Color(a1),d4
  2542.          moveq     #0,d5
  2543.          move.l    lve_String(a1),a5
  2544.          moveq     #2,d6
  2545.          move.l    d2,d7
  2546.          bsr.s     _DrawText
  2547.  
  2548.          addq.l    #8,d2
  2549.          move.l    d0,a1
  2550.          move.l    (a1),d0
  2551.          dbeq      d1,.Loop
  2552.  
  2553. .EmptyList:
  2554.  
  2555.          clr.l     _TextLimit
  2556.          rts
  2557.  
  2558. ILVClear:
  2559.          rts
  2560.          moveq     #0,d3
  2561.          movem.l   ge_Domain+gd_Width(a0),d6-7
  2562.          moveq     #2,d4
  2563.          moveq     #1,d5
  2564.          subq.l    #4,d6
  2565.          subq.l    #2,d7
  2566.          bsr       _DrawRectangle
  2567.          rts
  2568.  
  2569. ILVClick:
  2570.          move.l    d1,d2
  2571.          subq.l    #1,d2
  2572.          bpl.s     .Clicku
  2573.          rts
  2574.  
  2575. .Clicku:
  2576.          move.l    a0,_ActiveGuiEntry
  2577.          move.l    #ILVHandler,_ActiveThingHandler
  2578.  
  2579. ILVHandler:
  2580.          btst      #6,$bfe001
  2581.          bne.s     .Release
  2582.  
  2583.          sub.l     ge_Domain+gd_Top(a0),d1
  2584.  
  2585.          subq.l    #1,d1
  2586.          bmi.s     .Before
  2587.  
  2588.          lsr.l     #3,d1
  2589.          move.l    ge_Temp(a0),d0
  2590.          subq.l    #1,d0
  2591.  
  2592.          cmp.l     d1,d0
  2593.          bcs.s     .After
  2594.  
  2595.          move.l    ge_Temp2(a0),d0
  2596.          beq       .Done
  2597.  
  2598.          clr.l     ILVHookCount
  2599.  
  2600.          move.l    d1,d2
  2601.          move.l    d0,a1
  2602.  
  2603.          subq.l    #1,d1
  2604.          bmi.s     .Vivi
  2605.  
  2606.          move.l    (a1),d0
  2607.  
  2608. .Loop:
  2609.          move.l    d0,a1
  2610.          move.l    (a1),d0
  2611.  
  2612.          dbeq      d1,.Loop
  2613.          bne.s     .Vivi
  2614.  
  2615.          move.l    lve_Prev(a1),a1
  2616.  
  2617. .Vivi:
  2618.          cmp.l     ge_Temp3(a0),a1
  2619.          beq.s     .Done
  2620.  
  2621.          move.l    a1,ge_Temp3(a0)
  2622.  
  2623.          moveq     #0,d3
  2624.          moveq     #2,d4
  2625.          move.l    ge_Data2(a0),d5
  2626.          bmi       ILVRenderEntries
  2627.  
  2628.          moveq     #8,d7
  2629.          move.l    ge_Domain+gd_Width(a0),d6
  2630.          subq.l    #4,d6
  2631.          bsr       _DrawRectangle
  2632.          bra       ILVRenderEntries
  2633.  
  2634. .Before:
  2635.          sub.l     #1,ILVHookCount
  2636.          bpl.s     .Done
  2637.  
  2638.          move.l    #5,ILVHookCount
  2639.          move.l    a0,a3
  2640.          move.l    ge_ID(a3),a1
  2641.  
  2642.          move.l    ge_Temp3(a1),a0
  2643.          move.l    ge_Data(a0),d7
  2644.          move.l    d7,d0
  2645.          subq.l    #1,d0
  2646.          move.l    d0,ge_Data(a0)
  2647.          bsr       _RefreshGuiEntry
  2648.  
  2649.          cmp.l     ge_Data(a0),d7
  2650.          beq.s     .Done
  2651.  
  2652.          move.l    a1,a0
  2653.          bsr       LVFirstVisAddress
  2654.  
  2655.          move.l    a3,a0
  2656.          move.l    ge_Temp2(a0),ge_Temp3(a0)
  2657.          bsr       ILVClear
  2658.  
  2659.          bra       ILVRenderEntries
  2660.  
  2661. .After:
  2662.          sub.l     #1,ILVHookCount
  2663.          bpl.s     .Done
  2664.  
  2665.          move.l    #5,ILVHookCount
  2666.          move.l    a0,a3
  2667.          move.l    ge_ID(a3),a1
  2668.  
  2669.          move.l    ge_Temp3(a1),a0
  2670.          move.l    ge_Data(a0),d7
  2671.          move.l    d7,d0
  2672.          addq.l    #1,d0
  2673.          move.l    d0,ge_Data(a0)
  2674.          bsr       _RefreshGuiEntry
  2675.  
  2676.          cmp.l     ge_Data(a0),d7
  2677.          beq.s     .Done
  2678.  
  2679.          move.l    a1,a0
  2680.          bsr       LVFirstVisAddress
  2681.  
  2682.          move.l    a3,a0
  2683.          move.l    ge_Temp3(a0),a1
  2684.          move.l    (a1),a1
  2685.          tst.l     (a1)
  2686.          beq.s     .MaisEuh
  2687.  
  2688.          move.l    a1,ge_Temp3(a0)
  2689.  
  2690. .MaisEuh:
  2691.          bsr       ILVClear
  2692.  
  2693.          bra       ILVRenderEntries
  2694.  
  2695. .Release:
  2696.          clr.l     _ActiveThingHandler
  2697.          clr.l     _ActiveGuiEntry
  2698.          clr.l     ILVHookCount
  2699.  
  2700.          move.l    ge_ID(a0),a1
  2701.          move.l    ge_Temp3(a0),d0
  2702.          move.l    d0,ge_Data3(a1)
  2703.  
  2704.          move.l    ge_Temp3(a1),a2
  2705.          move.l    ge_Data(a2),ge_Data2(a1)
  2706.  
  2707.          move.l    d0,a0
  2708.          move.l    ge_Hook(a1),d0
  2709.          beq.s     .Done
  2710.          move.l    d0,a1
  2711.          jmp       (a1)
  2712.  
  2713. .Done:
  2714.          rts
  2715.  
  2716. ILVHookCount:
  2717.          dc.l      0
  2718. ;fe
  2719. ;fs "_HSpacingEater"
  2720. _HSpacingEater:
  2721.          dc.l      HSEGetMinMax
  2722.          dc.l      0
  2723.          dc.l      0
  2724.          dc.l      -1
  2725.  
  2726. HSEGetMinMax:
  2727.          moveq     #-GuiHorSpacing*2,d0
  2728.          move.l    d0,ge_MinWidth(a0)
  2729.          move.l    d0,ge_MaxWidth(a0)
  2730.  
  2731.          clr.l     ge_MinHeight(a0)
  2732.          clr.l     ge_MaxHeight(a0)
  2733.  
  2734.          lea       ge_Size(a0),a1
  2735.          move.l    a1,ge_Next(a0)
  2736.          rts
  2737. ;fe
  2738. ;fs "_VSpacingEater"
  2739. _VSpacingEater:
  2740.          dc.l      VSEGetMinMax
  2741.          dc.l      0
  2742.          dc.l      0
  2743.          dc.l      -1
  2744.  
  2745. VSEGetMinMax:
  2746.          clr.l     ge_MinWidth(a0)
  2747.          clr.l     ge_MaxWidth(a0)
  2748.  
  2749.          moveq     #-GuiVerSpacing*2,d0
  2750.          move.l    d0,ge_MinHeight(a0)
  2751.          move.l    d0,ge_MaxHeight(a0)
  2752.  
  2753.          lea       ge_Size(a0),a1
  2754.          move.l    a1,ge_Next(a0)
  2755.          rts
  2756. ;fe
  2757. ;fs "_Empty"
  2758. _Empty:
  2759.          dc.l      EGetMinMax
  2760.          dc.l      0
  2761.          dc.l      0
  2762.          dc.l      0
  2763.  
  2764. EGetMinMax:
  2765.          clr.l     ge_MinWidth(a0)
  2766.          clr.l     ge_MaxWidth(a0)
  2767.          clr.l     ge_MinHeight(a0)
  2768.          clr.l     ge_MaxHeight(a0)
  2769.  
  2770.          lea       ge_Size(a0),a1
  2771.          move.l    a1,ge_Next(a0)
  2772.          rts
  2773. ;fe
  2774.  
  2775. ;fs "_Selector"
  2776. _Selector:
  2777.          dc.l      SGetMinMax
  2778.          dc.l      SLayout
  2779.          dc.l      SRender
  2780.          dc.l      SClick
  2781.  
  2782. SGetMinMax:
  2783.          move.l    #GuiScreenWidth,d2
  2784.          move.l    d2,ge_MinWidth(a0)
  2785.          move.l    d2,ge_MaxWidth(a0)
  2786.  
  2787.          moveq     #31,d0
  2788.          move.l    d0,ge_MinHeight(a0)
  2789.  
  2790.          move.l    a0,a1
  2791.          lea       ge_Size(a0),a0
  2792.          moveq     #0,d0
  2793.          moveq     #0,d1
  2794.          lsr.l     #1,d2
  2795.  
  2796. .Loop:
  2797.          addq.l    #1,d1
  2798.  
  2799.          bsr.s     _GetMinMax
  2800.  
  2801.          add.l     ge_MinWidth(a0),d0
  2802.          cmp.l     d0,d2
  2803.          bcs.s     .Skronk
  2804.  
  2805.          move.l    ge_Next(a0),a0
  2806.          tst.l     (a0)
  2807.          beq.s     .Done
  2808.  
  2809.          addq.l    #1,d0
  2810.  
  2811.          bra.s     .Loop
  2812.  
  2813. .Skronk:
  2814.          sub.l     ge_MinWidth(a0),d0
  2815.          subq.l    #1,d0
  2816.          subq.l    #1,d1
  2817. .Done:
  2818.          sub.l     d0,d2
  2819.  
  2820.          subq.l    #1,d1
  2821.          move.l    d1,ge_Temp(a1)
  2822.          beq.s     .SearchLast
  2823.  
  2824.          divu      d1,d2
  2825.          ext.l     d2
  2826.          addq.l    #1,d2
  2827.          move.l    d2,ge_Data(a1)
  2828.  
  2829. .SearchLast:
  2830.          tst.l     (a0)
  2831.          beq.s     .AllDone
  2832.          lea       ge_Size(a0),a0
  2833.          bra.s     .SearchLast
  2834. .AllDone:
  2835.  
  2836.          lea       ge_Size(a0),a0
  2837.          move.l    a0,ge_Next(a1)
  2838.          rts
  2839.  
  2840. SLayout:
  2841.          move.l    _CurrentDomain(pc),a1
  2842.  
  2843.          move.l    a0,a1
  2844.          move.l    ge_Data(a1),d2
  2845.  
  2846.          lea       ge_Size(a0),a0
  2847.          moveq     #0,d0
  2848.  
  2849.          move.l    ge_Temp(a1),d3
  2850.          bne.s     .PosLoop
  2851.  
  2852.          move.l    #GuiScreenWidth/2,d0
  2853.          sub.l     ge_MinWidth(a0),d0
  2854.          lsr.l     #1,d0
  2855.  
  2856. .PosLoop:
  2857.          move.l    d0,ge_Domain+gd_Left(a0)
  2858.  
  2859.          move.l    ge_MinWidth(a0),d1
  2860.          move.l    d1,ge_Domain+gd_Width(a0)
  2861.  
  2862.          add.l     d1,d0
  2863.          move.l    d0,ge_Domain+gd_Right(a0)
  2864.  
  2865.          move.l    ge_MinHeight(a0),d1
  2866.          move.l    d1,ge_Domain+gd_Height(a0)
  2867.          move.l    d1,ge_Domain+gd_Bottom(a0)
  2868.  
  2869.          clr.l     ge_Domain+gd_Top(a0)
  2870.  
  2871.          add.l     d2,d0
  2872.  
  2873.          bsr       _Layout
  2874.  
  2875.          move.l    ge_Next(a0),a0
  2876.          dbf       d3,.PosLoop
  2877.  
  2878.          rts
  2879.  
  2880. SRender:
  2881.          move.l    _CurrentDomain(pc),a1
  2882.          move.l    gd_Top(a1),d0
  2883.          add.w     GuiP(pc),d0
  2884.          move.w    d0,GuiSelP
  2885.  
  2886.          move.l    #GuiLayer1,_GuiL1Ptr
  2887.          bra       _GRender
  2888.  
  2889. SClick:
  2890.          move.l    _CurrentDomain(pc),a1
  2891.          sub.l     gd_Top(a1),d1
  2892.  
  2893.          lea       ge_Size(a0),a0
  2894.          lsr.l     #1,d0
  2895.  
  2896. .Loop:
  2897.          cmp2.l    ge_Domain+gd_Left(a0),d0
  2898.          bcs.s     .AGrunt
  2899.  
  2900.          cmp2.l    ge_Domain+gd_Top(a0),d1
  2901.          bcc.s     .Bingo
  2902.  
  2903. .AGrunt:
  2904.          move.l    ge_Next(a0),a0
  2905.          tst.l     (a0)
  2906.          bne.s     .Loop
  2907.          rts
  2908.  
  2909. .Bingo:
  2910.          bsr.s     _DoClick
  2911.          rts
  2912. ;fe
  2913. ;fs "_Sprite"
  2914. _Sprite:
  2915.          dc.l      SprGetMinMax
  2916.          dc.l      0
  2917.          dc.l      SprRender
  2918.          dc.l      SprClick
  2919.  
  2920. SprGetMinMax:
  2921.          move.l    ge_Data(a0),a1
  2922.  
  2923.          move.l    spd_Width(a1),d0
  2924.          move.l    d0,ge_MinWidth(a0)
  2925.          move.l    d0,ge_MaxWidth(a0)
  2926.  
  2927.          move.l    spd_Height(a1),d0
  2928.          move.l    d0,ge_MinHeight(a0)
  2929.          move.l    d0,ge_MaxHeight(a0)
  2930.  
  2931.          lea       ge_Size(a0),a1
  2932.          move.l    a1,ge_Next(a0)
  2933.          rts
  2934.  
  2935. SprRender:         ; d6/d7=X,Y a3=SpriteData
  2936.          move.l    ge_Data(a0),a3
  2937.  
  2938.          move.l    _CurrentDomain(pc),a0
  2939.          move.l    gd_Left(a0),d6
  2940.          move.l    gd_Top(a0),d7
  2941.  
  2942.          move.l    d6,d5
  2943.          and.l     #$f,d5
  2944.          ror.w     #4,d5
  2945.          move.w    d5,d0
  2946.          swap      d5
  2947.          move.w    d0,d5
  2948.          or.l      #$0fca0000,d5
  2949.  
  2950.          lea       SprBlit(pc),a0
  2951.          moveq     #0,d0
  2952.          bsr       _GetBlitNode
  2953.          move.l    a1,a0
  2954.  
  2955.          move.l    d5,(a0)+
  2956.  
  2957.          move.w    spd_WWidth+2(a3),d5
  2958.          addq.w    #1,d5
  2959.  
  2960.          move.w    #GuiSelBufferWidth,d1
  2961.          sub.w     d5,d1
  2962.          sub.w     d5,d1
  2963.  
  2964.          moveq     #-2,d2
  2965.          move.w    d2,(a0)+
  2966.          move.w    d1,(a0)+
  2967.  
  2968.          mulu      #GuiSelLineSize,d7
  2969.          lsr.l     #4,d6
  2970.          add.l     d6,d7
  2971.          add.l     d6,d7
  2972.  
  2973.          add.l     _GuiSelBitmap(pc),d7
  2974.  
  2975.          movem.l   spd_Bitmap(a3),d3-4
  2976.  
  2977.          move.l    d4,(a0)+
  2978.          move.l    d3,(a0)+
  2979.          move.l    d7,(a0)+
  2980.  
  2981.          move.w    spd_Height+2(a3),d2
  2982.          mulu      #NbPlanes,d2
  2983.          move.w    d2,(a0)+
  2984.          move.w    d5,(a0)
  2985.  
  2986.          bsr       _AddBlitNode
  2987.          rts
  2988.  
  2989. SprBlit:
  2990.          move.l    (a0)+,bltcon0(a6)
  2991.          moveq     #-1,d0
  2992.          clr.w     d0
  2993.          move.l    d0,bltafwm(a6)
  2994.          move.w    (a0)+,d0
  2995.          move.w    d0,bltamod(a6)
  2996.          move.w    d0,bltbmod(a6)
  2997.          move.w    (a0)+,d0
  2998.          move.w    d0,bltcmod(a6)
  2999.          move.w    d0,bltdmod(a6)
  3000.          move.l    (a0)+,bltapt(a6)
  3001.          move.l    (a0)+,bltbpt(a6)
  3002.          move.l    (a0)+,d0
  3003.          move.l    d0,bltcpt(a6)
  3004.          move.l    d0,bltdpt(a6)
  3005.          move.w    (a0)+,bltsizv(a6)
  3006.          move.w    (a0),bltsizh(a6)
  3007.          rts
  3008.  
  3009. SprClick:
  3010.          move.l    a0,_ActiveGuiEntry
  3011.          lea       SprHandler(pc),a1
  3012.          move.l    a1,_ActiveThingHandler
  3013.          rts
  3014.  
  3015. SprHandler:
  3016.          btst      #6,$bfe001
  3017.          beq.s     .Done
  3018.  
  3019.          clr.l     _ActiveThingHandler
  3020.          move.l    ge_Hook(a0),d0
  3021.          beq.s     .Done
  3022.          move.l    d0,a0
  3023.          jmp       (a0)
  3024.  
  3025. .Done:
  3026.          rts
  3027. ;fe
  3028. ;fe
  3029.  
  3030. _CurrentDomain:
  3031.          ds.l      1
  3032. _CtGuiTemp:
  3033.          ds.l      1
  3034.  
  3035. ;fs "_ClearDomain"
  3036. _ClearDomain:
  3037.          moveq     #0,d3
  3038.          moveq     #0,d4
  3039.          moveq     #0,d5
  3040.          move.l    _CurrentDomain(pc),a1
  3041.          move.l    gd_Width(a1),d6
  3042.          move.l    gd_Height(a1),d7
  3043.          bsr.s     _DrawRectangle
  3044.          rts
  3045. ;fe
  3046. ;fs "_DrawBevelBox"
  3047. _DrawBevelBox:     ; d0/d1/d2/d3=X,Y,W,H d4=RecessedFlag
  3048.          movem.l   d3-d7/a0,-(a7)
  3049.  
  3050.          move.l    d3,a0
  3051.          moveq     #2,d3
  3052.          tst.b     d4
  3053.          beq.s     .Raised
  3054.          moveq     #1,d3
  3055. .Raised:
  3056.  
  3057.          move.l    d0,d4
  3058.          move.l    d1,d5
  3059.          moveq     #2,d6
  3060.          move.l    a0,d7
  3061.          bsr.s     _DrawRectangle
  3062.  
  3063.          eor.b     #3,d3
  3064.          add.l     d2,d4
  3065.          subq.l    #2,d4
  3066.          bsr.s     _DrawRectangle
  3067.  
  3068.          move.l    d0,d4
  3069.          addq.l    #1,d4
  3070.          add.l     a0,d5
  3071.          subq.l    #1,d5
  3072.          move.l    d2,d6
  3073.          subq.l    #1,d6
  3074.          moveq     #1,d7
  3075.          bsr.s     _DrawRectangle
  3076.  
  3077.          eor.b     #3,d3
  3078.          move.l    d0,d4
  3079.          move.l    d1,d5
  3080.          bsr.s     _DrawRectangle
  3081.  
  3082.          movem.l   (a7)+,d3-7/a0
  3083.          rts
  3084. ;fe
  3085. ;fs "_DrawRectangle"
  3086. _DrawRectangle:    ; d4/d5/d6/d7=X,Y,W,H d3=Col
  3087.          ;rts
  3088.          movem.l   d0-7/a0-6,-(a7)
  3089.  
  3090.          move.l    _CurrentDomain(pc),a0
  3091.          add.l     gd_Left(a0),d4
  3092.          add.l     gd_Top(a0),d5
  3093.  
  3094.          add.l     #2,_RectCount
  3095.  
  3096.          lea       _RectBlit,a0
  3097.          moveq     #0,d0
  3098.          bsr       _GetBlitNode
  3099.          move.l    a1,a2
  3100.  
  3101.          lea       _RectBlit,a0
  3102.          moveq     #0,d0
  3103.          bsr       _GetBlitNode
  3104.          move.l    a1,a0
  3105.          move.l    a2,a3
  3106.  
  3107.          move.l    #$050c0000,d0
  3108.          move.l    d0,d1
  3109.          move.l    #$05fc0000,d2
  3110.  
  3111.          btst      #0,d3
  3112.          beq.s     .Bp1Ok
  3113.          move.l    d2,d0
  3114. .Bp1Ok:
  3115.          move.l    d0,(a0)+
  3116.          btst      #1,d3
  3117.          beq.s     .Bp2Ok
  3118.          move.l    d2,d1
  3119. .Bp2Ok:
  3120.          move.l    d1,(a3)+
  3121.  
  3122.          move.l    d4,d0
  3123.          lsr.l     #4,d4
  3124.  
  3125.          and.b     #$f,d0
  3126.          extb.l    d0
  3127.          add.l     d0,d6
  3128.          moveq     #-1,d1
  3129.          lsr.w     d0,d1
  3130.          move.w    d1,(a0)+
  3131.          move.w    d1,(a3)+
  3132.  
  3133.          move.l    d6,d0
  3134.          lsr.l     #4,d6
  3135.  
  3136.          moveq     #-1,d1
  3137.  
  3138.          and.b     #$f,d0
  3139.          beq.s     .Gaaa
  3140.          addq.l    #1,d6
  3141.          lsr.w     d0,d1
  3142.          not.w     d1
  3143. .Gaaa:
  3144.  
  3145.          move.w    d1,(a0)+
  3146.          move.w    d1,(a3)+
  3147.  
  3148.          move.l    _GuiBitmap(pc),d0
  3149.          add.l     d4,d0
  3150.          add.l     d4,d0
  3151.  
  3152.          move.l    d5,d1
  3153.          move.l    #GuiLineSize,d2
  3154.          mulu      d2,d1
  3155.          add.l     d1,d0
  3156.  
  3157.          move.l    d0,(a0)+
  3158.  
  3159.          add.l     #GuiBufferWidth,d0
  3160.          move.l    d0,(a3)+
  3161.  
  3162.          sub.l     d6,d2
  3163.          sub.l     d6,d2
  3164.  
  3165.          move.w    d2,(a0)+
  3166.          move.w    d2,(a3)+
  3167.  
  3168.          move.w    d7,(a0)+
  3169.          move.w    d7,(a3)+
  3170.          move.w    d6,(a0)
  3171.          move.w    d6,(a3)
  3172.  
  3173.          bsr       _PreAddBlitNode
  3174.          move.l    a2,a1
  3175.          bsr       _AddBlitNode
  3176.  
  3177.          movem.l   (a7)+,d0-7/a0-6
  3178.          rts
  3179. _RectBlit:
  3180.          lea       _RectHook(pc),a5
  3181.          move.l    a5,_BlitHook
  3182.  
  3183.          move.l    (a0)+,bltcon0(a6)
  3184.          move.l    (a0)+,bltafwm(a6)
  3185.          move.l    (a0)+,d0
  3186.          move.l    d0,bltbpt(a6)
  3187.          move.l    d0,bltdpt(a6)
  3188.          move.w    (a0)+,d0
  3189.          move.w    d0,bltbmod(a6)
  3190.          move.w    d0,bltdmod(a6)
  3191.          move.w    #-1,bltadat(a6)
  3192.          move.w    (a0)+,bltsizv(a6)
  3193.          move.w    (a0),bltsizh(a6)
  3194.          rts
  3195. _RectHook:
  3196.          sub.l     #1,_RectCount
  3197.          rts
  3198. _RectCount:
  3199.          dc.l      0
  3200. ;fe
  3201. ;fs "_DrawText"
  3202. _TextLimit:
  3203.          dc.l      0
  3204. _DrawText:         ; d6/d7=X,Y d5=Length d4=Col a5=String
  3205.          movem.l   d3/d5-6/a0/a5,-(a7)
  3206.  
  3207.          tst.l     d5
  3208.          bne.s     .LengthOk
  3209.  
  3210.          move.l    a5,a0
  3211. .StrLen:
  3212.          tst.b     (a0)+
  3213.          bne.s     .StrLen
  3214.          sub.l     a5,a0
  3215.          move.l    a0,d5
  3216.          subq.l    #1,d5
  3217.  
  3218. .LengthOk:
  3219.  
  3220.          move.l    _TextLimit(pc),d3
  3221.          beq.s     .NoClip
  3222.          sub.l     d6,d3
  3223.          lsr.l     #3,d3
  3224.          cmp.l     d5,d3
  3225.          bcc.s     .NoClip
  3226.          move.l    d3,d5
  3227. .NoClip:
  3228.  
  3229.          subq.l    #1,d5
  3230.          move.l    d5,d3
  3231. .Loop:
  3232.          move.b    (a5)+,d5
  3233.          bsr.s     _DrawChar
  3234.          addq.l    #8,d6
  3235.          dbf       d3,.Loop
  3236.          movem.l   (a7)+,d3/d5-6/a0/a5
  3237.          rts
  3238. ;fe
  3239. ;fs "_DrawChar"
  3240. _DrawChar:         ; d6/d7=X,Y d5=Char d4=Col
  3241.          ;rts
  3242.          movem.l   d0-3/d6-7/a0-2,-(a7)
  3243.  
  3244.          move.l    _CurrentDomain(pc),a0
  3245.          add.l     gd_Left(a0),d6
  3246.          add.l     gd_Top(a0),d7
  3247.  
  3248.          cmp.b     #$a0,d5
  3249.          beq.s     .Done
  3250.          bcs.s     .Ok
  3251.  
  3252.          cmp.b     #$ad,d5
  3253.          bcs.s     .Pfouh
  3254.          beq.s     .Crévindiou
  3255.          subq.b    #1,d5
  3256.          bra.s     .Pfouh
  3257. .Crévindiou:
  3258.          move.b    #"-",d5
  3259.          bra.s     .Ok
  3260. .Pfouh:
  3261.          subq.b    #1,d5
  3262. .Ok:
  3263.  
  3264.          move.l    _GuiBitmap(pc),a1
  3265.          mulu      #GuiLineSize,d7
  3266.          add.l     d7,a1
  3267.  
  3268.          moveq     #0,d7
  3269.          not.b     d7
  3270.          ror.l     #8,d7
  3271.  
  3272.          btst      #0,d5
  3273.          beq.s     .EvenChar
  3274.          subq.l    #2,a1
  3275.          addq.l    #8,d6
  3276.          lsr.l     #8,d7
  3277. .EvenChar:
  3278.  
  3279.          lea       _GuiFont(pc),a0
  3280.          and.b     #$fe,d5
  3281.          add.l     d5,a0
  3282.  
  3283.          move.l    d6,d0
  3284.          lsr.l     #3,d0
  3285.          and.b     #$fe,d0
  3286.          add.l     d0,a1
  3287.  
  3288.          and.l     #$f,d6
  3289.          move.l    #254,d0
  3290.          move.l    #GuiBufferWidth,d1
  3291.          moveq     #7,d3
  3292.  
  3293. .RWait:
  3294.          tst.l     _RectCount
  3295.          bne.s     .RWait
  3296.  
  3297.          lea       CharTable(pc),a2
  3298.          jsr       (a2,d4.w*2)
  3299.  
  3300. .Done:
  3301.          movem.l   (a7)+,d0-3/d6-7/a0-2
  3302.          rts
  3303.  
  3304. CharTable:
  3305.          bra.s     CharLoop0
  3306.          bra.s     CharLoop1
  3307.          bra.s     CharLoop2
  3308.          bra.s     CharLoop3
  3309.  
  3310. CharLoop0:
  3311.          move.l    (a0),d2
  3312.          and.l     d7,d2
  3313.          lsr.l     d6,d2
  3314.          not.l     d2
  3315.          and.l     d2,(a1)
  3316.          add.l     d1,a1
  3317.          and.l     d2,(a1)
  3318.          add.l     d1,a1
  3319.          add.l     d0,a0
  3320.          dbf       d3,CharLoop0
  3321.          rts
  3322. CharLoop1:
  3323.          move.l    (a0),d2
  3324.          and.l     d7,d2
  3325.          lsr.l     d6,d2
  3326.          or.l      d2,(a1)
  3327.          not.l     d2
  3328.          add.l     d1,a1
  3329.          and.l     d2,(a1)
  3330.          add.l     d1,a1
  3331.          add.l     d0,a0
  3332.          dbf       d3,CharLoop1
  3333.          rts
  3334. CharLoop2:
  3335.          move.l    (a0),d2
  3336.          and.l     d7,d2
  3337.          lsr.l     d6,d2
  3338.          not.l     d2
  3339.          and.l     d2,(a1)
  3340.          not.l     d2
  3341.          add.l     d1,a1
  3342.          or.l      d2,(a1)
  3343.          add.l     d1,a1
  3344.          add.l     d0,a0
  3345.          dbf       d3,CharLoop2
  3346.          rts
  3347. CharLoop3:
  3348.          move.l    (a0),d2
  3349.          and.l     d7,d2
  3350.          lsr.l     d6,d2
  3351.          or.l      d2,(a1)
  3352.          add.l     d1,a1
  3353.          or.l      d2,(a1)
  3354.          add.l     d1,a1
  3355.          add.l     d0,a0
  3356.          dbf       d3,CharLoop3
  3357.          rts
  3358. ;fe
  3359. ;fs "Font"
  3360. _GuiFont:
  3361.          incbin    "GuiFont.bin"
  3362. ;fe
  3363.